李晨范冰冰青岛逛街:又一个C++的小问题,请大虾帮忙

来源:百度文库 编辑:高校问答 时间:2024/05/06 03:02:15
为什么使用new关键字分配的对象不使用delete释放掉就不会在程序执行完毕时调用析构函数?(如果直接用类名定义对象就会在退出程序的时候自动调用析构函数),有实例如下:

#include <iostream>

using namespace std;

class myclass{
int width,height;
public:
myclass(int w,int h){width=w;height=h;}
myclass(){width=height=4;}
~myclass(){cout<<"Destructing "<<width<<"*"<<height<<" rectangle..."<<endl;}
void display(){cout<<"Width="<<width<<'\n'<<"Height="<<height<<endl;}
};

int main(){
myclass *p_class1,*p_class2;
p_class1=new myclass(2,31);
p_class2=new myclass;
p_class1->display();
p_class2->display();
delete p_class1;
delete p_class2;
return 0;
}

以类名定义的对象,其内存是被分配在程序自己的栈空间里面的,程序退出的时候,栈所占的内存是自动释放的,而以new关键字分配的对象,其内存是被分配在堆上的,而堆和具体的程序的退出是无关的,所以必须手工使用delete释放才可以.

这是编译器决定的。

用new, 类似于用 malloc 给数组和结构动态分配单元,要用free释放. 类用destructor释放.

这是C++得编译器决定得啊,没有办法啊。