使用私有析构函数删除动态分配的对象

Use*_*d82 2 c++ destructor dynamic-memory-allocation

因此,我遇到了一个代码片段,该片段说明了如果我们要强制动态分配任何类对象,则应将其析构函数设为private

我试过了,是的,它不允许实例化堆栈上的对象。但是,当我实例化一个动态分配的实例并尝试删除该对象(否则会导致泄漏)时,我不断收到有关析构函数为私有的警告。

如何正确管理具有私有析构函数的动态分配对象的内存?

eer*_*ika 6

与访问任何其他私有成员函数一样,您必须在成员或朋友函数中执行此操作。一个例子:

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)