gpt4 book ai didi

c++ - 在大小在运行时确定的对象上使用 std::unique_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:21 26 4
gpt4 key购买 nike

我有以下代码:

Gdiplus::Image image(filename.c_str());
UINT size = image.GetPropertyItemSize(PropertyTagExifDTOrig);
Gdiplus::PropertyItem* propertyItem = (Gdiplus::PropertyItem*)malloc(size);

问题在于此分支之后的代码基于几个不同的条件。所以我想使用类似 std::unique_ptr 的东西来确保最后一行的指针被删除,无论我的代码在哪里分支。

但是,std::unique_ptr 似乎并不容易在这里实现。它似乎需要固定大小的类型,并且不支持自定义大小。

这样对吗?这里有什么好的方法可以实现自动指针吗?

最佳答案

std::unique_ptr 支持自定义删除器。由于您正在使用 malloc 进行分配,因此您可以使用 free:

std::unique_ptr<Gdiplus::PropertyItem, void (*)(void*)> propertyItem{
(Gdiplus::PropertyItem*) std::malloc(size), &std::free};

如果您希望避免传递删除器,您可以创建一个为您执行删除的结构:

struct FreeDeleter {
void operator()(void* p) {
std::free(p);
}
};

std::unique_ptr<Gdiplus::PropertyItem, FreeDeleter> propertyItem{
(Gdiplus::PropertyItem*) std::malloc(size)};

关于c++ - 在大小在运行时确定的对象上使用 std::unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22574189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com