我对唯一指针的释放方法有点困惑。这是我的示例程序。
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
的意思是"向调用者释放所有权"。所以不,析构函数不是由它调用的。
如果要显式调用析构函数,则必须手动调用delete
release
d指针,或者只调用reset
,这是首选的方法。
如果你不需要明确地这样做,那么你可以离开它,它会自动得到处理。