I want to use std::unique_ptr
in combination with FreeImage\'s FITAG. The code in plain C would be:
... load image;
FITAG* tag = NULL;
FreeImag
Reverse the order of operations; first acquire the resource and then construct the unique_ptr
.
FITAG *p = NULL;
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", &p);
std::unique_ptr<FITAG, void(*)(FITAG*)> tag(p, &FreeImage_DeleteTag);
tag.get()
This returns an r-value. You can't get the address of an r-value( temporary ). Your best bet is to do this instead:
auto ptr = tag.get();
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", &ptr);
This will allow you to pass a FITAG** into the function. If you meant to pass a FITAG* into the function, just remove the & since tag.get() returns the pointer, not the value.
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", tag.get());