std::unique_ptr和指针到指针

std::unique_ptr and pointer to pointer

本文关键字:指针 unique std ptr      更新时间:2023-10-16

我想将std::unique_ptr与FreeImage的FITAG结合使用。纯C的代码是:

... load image;
FITAG* tag = NULL;
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", &tag);
... do some stuff with tag;
FreeImage_DeleteTag(tag);
... delete image;

我尝试使用unique_ptr:

std::unique_ptr<FITAG, void(*)(FITAG*)> tag(NULL, &FreeImage_DeleteTag);
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", &tag.get());

明显返回:

cannot take the address of an rvalue of type 'pointer' (aka 'FITAG *')

我该如何解决这个问题?

提前非常感谢。

反转操作顺序;首先获取资源,然后构造CCD_ 2。

FITAG *p = NULL;
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", &p);
std::unique_ptr<FITAG, void(*)(FITAG*)> tag(p, &FreeImage_DeleteTag);
tag.get()

这将返回一个r值。您无法获取r值的地址(临时(。你最好的选择是这样做:

auto ptr = tag.get();
FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", &ptr);

这将允许您将FITAG**传递到函数中。如果您想将FITAG*传递到函数中,只需删除&因为tag.get((返回的是指针,而不是值。

FreeImage_GetMetadata(FIMD_EXIF_EXIF, bitmap, "Property", tag.get());