class finder
{
public:
finder();
~finder();
}
int _tmain(int argc, _TCHAR* argv[])
{
finder* pfind = new finder(L"test");
finder find(L"test2");
system("PAUSE");
return 0;
}
据我所知,find 的析构函数会在程序退出后被调用,但 pfind 的析构函数不会被调用。我的问题是为什么?我应该添加
delete _pfind;
在返回 0 之前?
最佳答案
“为什么”是因为您有责任管理使用 new
创建的对象的生命周期。
该语言表示具有自动存储持续时间的对象(如示例中的 find
)与创建它们的 block 一样长。这些会在适当的时间(即通常在您离开该 block 时)自动删除(您不能自己删除)。
动态存储持续时间对象(如 pfind
指向的对象)持续到您删除它们。什么都不会为您删除它们。
所以是的,在这种情况下,您需要使用 delete pfind;
自行删除它。
(或者为您的用例使用适当类型的智能指针。)
关于c++ - 指向对象及其析构函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965977/