c++ - 指向对象及其析构函数的指针

标签 c++ pointers destructor delete-operator

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/

相关文章:

c++ - C++ 中 std::resize(n) 和 std::shrink_to_fit 的区别?

c++ - MSDN打开对话框示例代码

尝试显示指针值和指针地址时代码未运行

C++指针未声明

c++ - 析构函数如何知道何时激活自己?可以依靠吗?

c++ - 其他文件中的静态函数访问

c++ - FILE* 类的分配失败

C - 单步执行结构指针的问题

c++ - 为什么析构函数总是声明为虚拟的

c++ - 如果我将一个基类的析构函数从非虚拟更改为虚拟,会发生什么?