我正在管理析构函数是私有的类,因为必须将对象分配到堆中。
我们假设这个类为A。
std::unique_ptr<A> a(new A());
当a超出范围时,将调用析构函数。
但是,unique_ptr的默认行为是调用“public destructor”。
在这种情况下,如何在不将析构函数公开的情况下进行操作?
答案 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;
}