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

How should I use unique pointer in c++11 when the destructor is private?

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

我们假设这个 class 是 A.

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

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

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

这样的话,不做析构函数怎么办public?

您可以定义一个 deleter 函数并使用您的 class 使其成为 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