gpt4 book ai didi

c++ - 使用私有(private)析构函数删除动态分配的对象

转载 作者:行者123 更新时间:2023-12-02 05:38:28 25 4
gpt4 key购买 nike

所以我遇到了一个代码片段,它证明如果我们想要强制动态分配任何类对象,我们应该将其析构函数设为私有(private)

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

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

最佳答案

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

class foo {
~foo(){}
public:
static void del(const foo* ptr)
{
delete ptr;
}
};

或者更好的是,强制客户端使用智能指针:

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*/), {}};
}
};

关于c++ - 使用私有(private)析构函数删除动态分配的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58379254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com