0

为什么不调用析构函数?

即使我为 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;
}

为什么不调用构造函数?

4

3 回答 3

4

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

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

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

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

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

于 2013-09-15T07:35:16.233 回答
2

g++ 4.6没有问题

 mahmood@la:~$ g++ -o test test.cpp
 mahmood@la:~$ ./test

 In A const.
 In A const.
 In B const.
 In B dest.
 In A dest.
 In A dest.mahmood@la:~$ 
于 2013-09-15T07:09:54.407 回答
-1
class A {
public :

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

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

解构函数应该是virtual.

于 2013-09-15T12:56:46.917 回答