我有一堆第三方对象需要通过调用destroy来释放。由于这些对象需要在堆上分配,我想创建一个std :: unique_ptr来处理内存管理。但我的删除器永远不会被调用。我做错了什么?
template<typename T>
class ObjPtrDeleter
{
public:
void operator()(T* obj)
{
if (obj)
obj->destroy();
}
};
int main(int args, char** argv)
{
SomeFactory factory;
std::unique_ptr<ISomeInterface1, ObjPtrDeleter<ISomeInterface1>> obj1(factory.create(1));
std::unique_ptr<ISomeInterface2, ObjPtrDeleter<ISomeInterface2>> obj2(factory.create(2));
return 0;
}
答案 0 :(得分:0)
我发现了问题。第三方库没有为抽象基类定义虚拟析构函数。这就是我从未调用过自定义删除器的原因。