没有调用析构函数

时间:2013-09-15 06:56:13

标签: 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;
}

为什么不调用构造函数?

3 个答案:

答案 0 :(得分:4)

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

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

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

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

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

答案 1 :(得分: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:~$ 

答案 2 :(得分:-1)

class A {
public :

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

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

desconstructor应该是virtual