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

3个构造函数调用,却 1 个析构函数调用,为什么?解决办法

2012-03-12 
3个构造函数调用,却 1 个析构函数调用,为什么?C/C++ code#include iostreamusing namespace stdclassCB

3个构造函数调用,却 1 个析构函数调用,为什么?

C/C++ code
#include <iostream>using namespace std;class  CB; class CA { public:     CA();     CA(int);     ~CA();     bool Afun(void)     {         cout<<"Afun()"<<endl;        return   true;     }     CB *b;   }; class CB { public:     CB()// : a(1)    {         cout<<"CB Constructor function"<<endl;        i=0;     }    ~CB()    {        cout<<"CB Destructor function"<<endl;    }    bool Bfun(void)     {         if(a.Afun())         {             cout<<"Bfun()"<<endl;            return true;         }         return false;     }     int i; private:     CA a ; }; CA::CA() {    b = NULL;    cout<<"CA Constructor no params function"<<endl;} CA::CA(int j) {    cout<<"CA Constructor function"<<endl;    b=new CB;     b-> i=j; } CA::~CA() {     cout<<"CA Destructor function"<<endl;    free(b); } int  main() {     CA ma(0);         ma.b-> Bfun();     cout<<ma.b->i;    cout<<endl;    return   0; }


[解决办法]
free(b); ==> if(b) delete(b)
[解决办法]
构造函数可以根据参数初始化,析构函数又不需要,一个自然够了
[解决办法]
new对应的应该使用delete来释放,
delete 会调用析构函数来完成清理工作

C/C++ code
CA::~CA() {     cout<<"CA Destructor function"<<endl;    delete b;}
[解决办法]
我是说,任何个对象在创建时都要调用构造函数,销毁时都要调用析构函数。若你去实现这两个函数,在里面添加 cout 这类的函数,肯定他们是成对出现的
==========
是的,但是这个跟你问的问题有啥关系吗?

热点排行