C++ 分配内存块问题 高手进

用New创建的类用不用delete???比如A是一个类,A*P=newA,最后会不会因为构析函数而不用deleteP?可是我在用new后再用delete,程序在delet... 用New 创建的类用不用delete???比如A是一个类,A * P=new A,最后会不会因为构析函数而不用delete P?
可是我在用new后再用delete,程序在delete那里停住了,不知怎么回事。。。
展开
 我来答
梁__勇
2010-09-05 · 超过49用户采纳过TA的回答
知道答主
回答量:136
采纳率:0%
帮助的人:0
展开全部
1)new 创建的类,需要对应的delete才能删除,因为new分配的对象是保存在进程的堆内存中;
2)析构函数的调用需要delete才会触发调用(可以在debug调试模式下,切换到汇编代码分析,delete语句编译成的汇编代码里面,会调用析构函数的代码,new分配的对象,编译器无法自动编译出需要删除对象的代码,因为编译器无法判断new分配对象的作用域);
3)只有在栈上上分配的对象(如函数内定义:A a;),才会在函数退出时候,自动触发析构函数调用;(同样可以在debug模式下,切换到汇编代码观察,函数内的临时对象,会在函数退出时,自动调用对象的析构函数,这个是由编译器来自动编译实现的,因为编译器可以判断函数内临时对象的作用域是在函数内,因此编译器会在函数退出时候添加对象相应的析构函数代码,而且是遵循后进先出的原理,因为临时对象保存在线程的栈内存上,而不是在堆内存上);
zrj_bd
2010-09-05 · TA获得超过1870个赞
知道小有建树答主
回答量:647
采纳率:100%
帮助的人:1094万
展开全部
1.用new分配的空间一定要有对应的delete来释放
2.构析函数并不会主动帮你把new出来的空间释放,如果你自己没有主动用delete去释放,还是会存在内存泄露的问题的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
君哥哥爱漂移
2010-09-05 · TA获得超过334个赞
知道小有建树答主
回答量:99
采纳率:33%
帮助的人:58万
展开全部
必须要用delete释放new分配的内存空间,因为delete释放对象内存时,是释放的是栈内存,而new分配的是堆内存,所以一般在对象生存期结束之前,也就是
在析构函数中delete p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxytcjj
2010-09-08 · TA获得超过358个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:148万
展开全部
那是不可能的 除非你在 析构函数中释放

你把代码贴出来看看啊

你看看 这一点 没有问题的
#include <iostream>
using namespace std;
class A
{
public:
A(){ }
~A(){ }

};
void main()
{
A *p=new A;
delete p;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
上上西
2010-09-05 · TA获得超过346个赞
知道小有建树答主
回答量:386
采纳率:0%
帮助的人:0
展开全部
delete一个对象,代表调用该对象的析构函数。
new分配的对象处于堆内存空间,堆内存空间内的数据需要手动释放,否则引起内存泄露。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式