我对唯一指针的释放方法有点困惑。这是我的示例程序。
class Test
{
public:
Test(){std::cout << "ctor" << std::endl;}
~Test(){std::cout << "dtor" << std::endl;}
};
int main() {
std::unique_ptr<Test> ptr(new Test());
ptr.release(); // memory leak
//ptr.reset(); // this is ok but not necessary
return 0;
}
输出:
ctor
因为它没有打印 dtor
我假设它没有调用 Test
的析构函数,这将导致内存泄漏。 是吗?
最佳答案
release
一词的意思是“将所有权 释放给调用者”。所以不,它没有调用析构函数。
如果您想显式调用析构函数,那么您必须手动删除
release
d 指针,或者只调用重置
,这是执行此操作的首选方法。
如果您不需要明确地执行此操作,那么您可以保留它,它会自动处理。
关于C++ 唯一指针 : memory leak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566660/