我对独特指针的释放方法感到困惑。这是我的示例程序。
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
的析构函数,这将导致内存泄漏。 是吗?
答案 0 :(得分:11)
单词release
表示&#34;将所有权释放给来电者&#34;。所以不,析构函数不被它调用。
如果要明确调用析构函数 ,则必须手动delete
release
d指针,或者只调用reset
,这是首选方式。
如果您不需要明确地执行此操作,那么您可以离开它并自动处理它。