Avoid naked new operator in sample apps
This commit is contained in:
+14
-11
@@ -57,7 +57,7 @@ try {
|
||||
std::cout << "Added a few tags the quick way.\n";
|
||||
|
||||
// Create a ASCII string value (note the use of create)
|
||||
Exiv2::Value::UniquePtr v = Exiv2::Value::create(Exiv2::asciiString);
|
||||
auto v = Exiv2::Value::create(Exiv2::asciiString);
|
||||
// Set the value to a string
|
||||
v->read("1999:12:31 23:59:59");
|
||||
// Add the value together with its key to the Exif data container
|
||||
@@ -66,16 +66,16 @@ try {
|
||||
std::cout << "Added key \"" << key << "\", value \"" << *v << "\"\n";
|
||||
|
||||
// Now create a more interesting value (without using the create method)
|
||||
Exiv2::URationalValue::UniquePtr rv(new Exiv2::URationalValue);
|
||||
Exiv2::URationalValue rv;
|
||||
// Set two rational components from a string
|
||||
rv->read("1/2 1/3");
|
||||
rv.read("1/2 1/3");
|
||||
// Add more elements through the extended interface of rational value
|
||||
rv->value_.emplace_back(2, 3);
|
||||
rv->value_.emplace_back(3, 4);
|
||||
rv.value_.emplace_back(2, 3);
|
||||
rv.value_.emplace_back(3, 4);
|
||||
// Add the key and value pair to the Exif data
|
||||
key = Exiv2::ExifKey("Exif.Image.PrimaryChromaticities");
|
||||
exifData.add(key, rv.get());
|
||||
std::cout << "Added key \"" << key << "\", value \"" << *rv << "\"\n";
|
||||
exifData.add(key, &rv);
|
||||
std::cout << "Added key \"" << key << "\", value \"" << rv << "\"\n";
|
||||
|
||||
// *************************************************************************
|
||||
// Modify Exif data
|
||||
@@ -92,18 +92,21 @@ try {
|
||||
// Alternatively, we can use findKey()
|
||||
key = Exiv2::ExifKey("Exif.Image.PrimaryChromaticities");
|
||||
auto pos = exifData.findKey(key);
|
||||
if (pos == exifData.end()) throw Exiv2::Error(Exiv2::kerErrorMessage, "Key not found");
|
||||
if (pos == exifData.end())
|
||||
throw Exiv2::Error(Exiv2::kerErrorMessage, "Key not found");
|
||||
|
||||
// Get a pointer to a copy of the value
|
||||
v = pos->getValue();
|
||||
// Downcast the Value pointer to its actual type
|
||||
auto prv = dynamic_cast<Exiv2::URationalValue*>(v.release());
|
||||
if (prv == nullptr)
|
||||
throw Exiv2::Error(Exiv2::kerErrorMessage, "Downcast failed");
|
||||
rv = Exiv2::URationalValue::UniquePtr(prv);
|
||||
|
||||
rv = Exiv2::URationalValue(*prv);
|
||||
// Modify the value directly through the interface of URationalValue
|
||||
rv->value_.at(2) = {88, 77};
|
||||
rv.value_.at(2) = {88, 77};
|
||||
// Copy the modified value back to the metadatum
|
||||
pos->setValue(rv.get());
|
||||
pos->setValue(&rv);
|
||||
std::cout << "Modified key \"" << key
|
||||
<< "\", new value \"" << pos->value() << "\"\n";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user