Use*_*d82 2 c++ destructor dynamic-memory-allocation
因此,我遇到了一个代码片段,该片段说明了如果我们要强制动态分配任何类对象,则应将其析构函数设为private。
我试过了,是的,它不允许实例化堆栈上的对象。但是,当我实例化一个动态分配的实例并尝试删除该对象(否则会导致泄漏)时,我不断收到有关析构函数为私有的警告。
如何正确管理具有私有析构函数的动态分配对象的内存?
与访问任何其他私有成员函数一样,您必须在成员或朋友函数中执行此操作。一个例子:
class foo {
~foo(){}
public:
static void del(const foo* ptr)
{
delete ptr;
}
};
Run Code Online (Sandbox Code Playgroud)
甚至更好的是,强制客户端使用智能指针:
class foo {
~foo(){}
struct deleter {
void operator()(const foo* ptr)
{
delete ptr;
}
};
public:
static std::unique_ptr<foo, deleter> make(/*args*/)
{
return {new foo(/*args*/), {}};
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |