C++不是说的默认析构函数不能删除new 操作符分配出来的对象或对象成员么? 但是为什么这里好像可以呢?

classCBox{char*pmessage;public:CBox(char*message){cout<<"CBox(char*message)runing!";p... class CBox{

char* pmessage;
public :

CBox(char* message){
cout<<"CBox(char* message) runing!";
pmessage=new char[strlen(message)+1];
strcpy_s(pmessage,strlen(message)+1,message);
}

void ScanMessage(){
cout<<'\n'<<pmessage;
}

~CBox(){
cout<<"\n ~CBox() has been runing!";
}
};

int main(void){
CBox *pbox;
pbox=new CBox("My name");
pbox->ScanMessage();
delete pbox;
return 0;
}
显示的结果为CBox(char* message) runing!";
My name
~CBox() has been runing!"
这里虽然显示了~CBox() has been runing!",但是不是只能说明它被调用了,并不表示他释放了CBox类中pmessage分配出来的内存呢?
另外,如果它没有释放,那是不是即使程序结束了,pmessage分配出来的内存任然未被释放呢?
展开
 我来答
ZeRur
推荐于2016-01-06 · TA获得超过378个赞
知道小有建树答主
回答量:243
采纳率:100%
帮助的人:229万
展开全部
这个析构函数 他施放的是类的成员变量 抛开别的不说 他施放的是 你new出来的那个对象的指针.,.. 所以其实他并没有施放这根new出来的对象 ,., 所以你需要调用 delete 在析构函数里 手动释放... 第二个问题 程序结束了 你的new出来的堆里的内存一定会被施放 这是操作系统保证的 不是你的程序的事了 ...
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式