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

mal*_*lea 2 unique-ptr c++11

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

让我们假设这个类为A。

 std::unique_ptr<A> a(new A());
Run Code Online (Sandbox Code Playgroud)

当这是一个范围时,析构函数被调用。

然而,的unique_ptr的默认行为是调用“公共析构函数”。

在这种情况下,我应该怎么做,而不会使析构函数公开?

per*_*rgy 5

您可以定义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;
}
Run Code Online (Sandbox Code Playgroud)

演示