c++ - 未调用析构函数

标签 c++ class object destructor

为什么不调用析构函数?

即使我已经为 A 类和 B 类编写了析构函数,但它没有被调用。


#include<iostream.h>
#include<conio.h>

class A {
    public :

    A() {
        cout<<"\nIn A const.";
    }

    ~A() {
        cout<<"\nIn A dest.";
    }
};

class B : public A {
    public :

    B() {
        cout<<"\nIn B const.";
    }

    ~B() {
        cout<<"\nIn B dest.";
    }
};

int main() {
    A a;
    B b;
    getch();
    return 0;
}

为什么不调用构造函数?

最佳答案

一旦退出包含对象的 block ,就会立即执行分配在堆栈上的对象的析构函数。

如果稍作修改,您的代码将显示在 getch() 之前调用的析构函数

int main() {
    {
        A a;
        B b;
    }
    getch();
    return 0;
}

在这里,我使用了一对额外的大括号来定义一个内部 block 。当退出该 block 时(因此在等待键盘输入之前),该 block 内定义的对象将被销毁。

在您的代码中,析构函数在 main 主体 block 退出时被调用,这意味着在等待键盘之后。

关于c++ - 未调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18809750/

相关文章:

C++ 将 RHEL4 32 位编写的应用程序迁移到 RHEL6 64 位

java - 访问修饰符

python - 在类中调用模块函数

javascript - JS 在对象数组上使用indexOf

c++ - 在运行的 Windows 控制台应用程序中处理拖放文件

c++ - 检索 STL 映射键

C++ shared_ptr std::bind 和 std::function

php - PHP-是否在类中正确使用了异常进行错误处理?

javascript - 如何从包含多个对象的 json 文件创建表?

javascript - javascript中如何将数组转换为对象