【问题标题】:Custom template deleter for std::unique_ptr not called未调用 std::unique_ptr 的自定义模板删除器
【发布时间】:2018-01-31 15:12:25
【问题描述】:

我有一堆第三方对象需要通过调用销毁来释放。由于需要在堆上分配这些对象,我想创建一个 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;
}

【问题讨论】:

标签: c++11


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2018-01-02
    • 1970-01-01
    • 2012-04-11
    • 2017-05-15
    相关资源
    最近更新 更多