【发布时间】:2014-03-22 06:19:08
【问题描述】:
我有以下代码:
Gdiplus::Image image(filename.c_str());
UINT size = image.GetPropertyItemSize(PropertyTagExifDTOrig);
Gdiplus::PropertyItem* propertyItem = (Gdiplus::PropertyItem*)malloc(size);
问题在于此之后的代码基于几个不同的条件进行了分支。所以我想使用std::unique_ptr之类的东西来确保最后一行的指针被删除,无论我的代码在哪里分支。
但是,std::unique_ptr 似乎无法在此处轻松实现。好像需要固定大小的类型,不支持自定义大小。
这是对的吗?这里有什么好办法实现自动指针吗?
【问题讨论】:
-
当代码是 C++ 时,你为什么使用
malloc? -
@EdHeal:有点好奇,这样做有什么问题吗?
-
@EdHeal: (1) 你错了,
malloc的 C++ 替代品是 notnew。它是operator new(size_t),它也not 调用构造函数。 (2) 啊?什么是“它”,为什么这很重要? (3) 再次,C++ 替代方案存在调用operator delete的问题;使用malloc而不是operator new不会改变任何东西。 (4) 好的,当然,这是我猜的原因之一。 -
@EdHeal:我认为您可能误解了此处 OP 的目标可能是分配比对象本身所需的空间更大的空间。
new T无法实现这一点;您必须将operator new与placementnew结合使用。 OP 只是将operator new替换为malloc,这在可读性/正确性方面非常好;它只是有点不习惯。 -
@EdHeal:我的意思是在 C++ 中使用
malloc分配内存 没有任何问题。当然,使用它来构造一个新对象是有问题的,但是使用malloc本身并不是问题——这是完全使用错误函数的问题。切换到 C++ 对应项(即operator new)将不再正确,因此说malloc是问题所在是错误的。
标签: c++ stl std unique-ptr