当析构函数是私有的时候,我应该如何在c ++ 11中使用唯一指针?

时间:2017-03-07 10:27:31

标签: c++11 unique-ptr

我正在管理析构函数是私有的类,因为必须将对象分配到堆中。

我们假设这个类为A。

 std::unique_ptr<A> a(new A());

当a超出范围时,将调用析构函数。

但是,unique_ptr的默认行为是调用“public destructor”。

在这种情况下,如何在不将析构函数公开的情况下进行操作?

1 个答案:

答案 0 :(得分:4)

您可以定义deleter功能,并将其friend与您的班级一起使用。

#include <memory>

class A{
    friend struct D;
private:
    ~A() {}
};
struct D {
    void operator()(A* a) const {
        delete a;
    }
};
int main(){
    std::unique_ptr<A, D> a(new A());
    return 0;
}

demo