首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

析构函数调用,该怎么解决

2012-06-07 
析构函数调用谁能帮忙详细解释一下以下问题class A{public: ~A(){}}class B{public:~B(){}}class C: p

析构函数调用
谁能帮忙详细解释一下以下问题
class A
{
public:
~A(){};
};

class B
{
public:
~B(){};
};

class C: public A
{
public:
~C(){};
private:
static B b;
};

class D: public C
{
public:
~D(){};
};

int _tmain(int argc, _TCHAR* argv[])
{
C* pd = new D();
delete pd;
return 0;
}
以上程序段运行后,A、B、C、D四个类的析构调用先后顺序是()
(A)~D ~C ~B ~A
(B)~D ~C ~A ~B
(C)~C ~A ~B
(D)~C ~B


[解决办法]

C/C++ code
#include <iostream>using namespace std;class A{public:~A(){cout<<"a"<<endl;};};class B{public:~B(){cout<<"b"<<endl;};};class C : public A{public:virtual ~C(){cout<<"c"<<endl;};private:        B b;};class D : public C{public:virtual ~D(){cout<<"d"<<endl;};};int main(int argc,char* argv[]){C* pd = new D();delete pd;return 0;}
[解决办法]
楼主,我觉得这里面好像没有答案啊!因为你的B作为一个static申明后没有在外部定义,那么就不可能有构造。而你的每一个里面都写有B的析构,郁闷!
[解决办法]
我添加了 B C::b;
也不见B的析构函数调用呢
C/C++ code
#include "stdafx.h"#include <stdlib.h>class A{public:    ~A(){printf("A \n"); };};class B{public:    ~B(){ printf("B \n"); };//    B(int ){};};    class C : public A{public:    ~C(){ printf("C \n"); };    static B b;    static int ic;};int C::ic = 90;B C::b;class D : public C{public:    ~D(){ printf("D \n"); };};int main(int argc, char* argv[]){    C* pd = new D();    delete pd;    system("pause");    return 0;}
[解决办法]
c类中对象B未在类外定义,因此不会构造,最后的结果是~C ~A 构造出的对象D未析构,如果要析构D,父类析构函数声明为virtual即呆

热点排行