当析构函数是私有的时,我应该如何在 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;
}
我正在管理 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;
}