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

为啥构造函数和析构函数的数目不对应

2013-09-07 
为什么构造函数和析构函数的数目不对应?教材上写的c++将按照与构造函数相反的次序调用析构函数,在这个程序

为什么构造函数和析构函数的数目不对应?
教材上写的c++将按照与构造函数相反的次序调用析构函数,在这个程序中为什么构造函数与西沟函数的调用不仅数目不对应而且次序也不是相反呢?运行结果的图片传不上来......

#include <iostream>
using namespace std;
class BASE
{
public:
    BASE(){cout<<"construct BASE!"<<endl;}
    virtual ~BASE()
    {
        cout<<"destruct BASE! "<<endl;
    }
};
class DERIVED:public BASE
{
public:
    DERIVED(){cout<<"construct DERIVED!"<<endl;}
    ~DERIVED()
    {
        cout<<"destruct DERIVED! "<<endl;
    }
};
int main()
{
BASE *b=new BASE;
    DERIVED d;
b=&d;
delete b;
    return 0;
}


[解决办法]
引用:
Quote: 引用:


 BASE *b=new BASE;  //堆上分配空间给b
    DERIVED d; // 
    b=&d; //把栈上空间又赋值给b了,导致new出来的空间无法访问了
    delete b;// 这里实际上是 delete d; 释放栈上的空间,出错!栈是系统维护的!
            // 自己new出来的空间因为地址不清楚 无法释放了

这里怎么会用到堆和栈的知识?那不是一种数据结构吗?


和数据结构的堆栈不一样!这里只是内存的一个管理方式而已!
可以看看内存管理这块知识点!

热点排行