未调用std :: unique_ptr的自定义模板删除程序

时间:2017-08-23 07:02:02

标签: c++11

我有一堆第三方对象需要通过调用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;
}

1 个答案:

答案 0 :(得分:0)

我发现了问题。第三方库没有为抽象基类定义虚拟析构函数。这就是我从未调用过自定义删除器的原因。