关于new和delete的疑问

lugaideath1 2009-03-17 10:41:13
我昨天在书上看到,说new和delete一般都是成对出现的!
但我想问的是,我new一个窗体的对象,然后窗体关闭的时候,它的析构函数不是已经把它占的内存释放了吗?为什么还要delete呢?
...全文
120 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
VCRWX 2009-03-17
  • 打赏
  • 举报
回复
5楼说的非常对
ctan 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 lugaideath1 的帖子:]
我昨天在书上看到,说new和delete一般都是成对出现的!
但我想问的是,我new一个窗体的对象,然后窗体关闭的时候,它的析构函数不是已经把它占的内存释放了吗?为什么还要delete呢?
[/Quote]
有析构函数, 并不代表它就会执行,
你不释放窗体, 窗体的析构函数会执行吗?

另外, 窗体关闭并不表示释放窗体对象,
释放窗体一般有两种情况, 一是显示释放, 即用delete释放,
还有一种就是作为局部变量, 随函数的结束自动释放
yshuise 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lqandlq 的回复:]
new了以后必须delete,这是潜规则!!
[/Quote]
晕,这是明确的规则,不是“潜规则”。
passionboy03 2009-03-17
  • 打赏
  • 举报
回复
up
[Quote=引用 5 楼 wohow 的回复:]
窗体的析构函数释放窗体内部分配的资源和内存(this->any),但是不能释放窗体本身被分配的内存(this)。
delete先调用析构函数(释放窗体内部分配的资源和内存),然后释放窗体分配的内存
[/Quote]
wohow 2009-03-17
  • 打赏
  • 举报
回复
窗体的析构函数释放窗体内部分配的资源和内存(this->any),但是不能释放窗体本身被分配的内存(this)。
delete先调用析构函数(释放窗体内部分配的资源和内存),然后释放窗体分配的内存
lqandlq 2009-03-17
  • 打赏
  • 举报
回复
new了以后必须delete,这是潜规则!!
chin_chen 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 lugaideath1 的帖子:]
我昨天在书上看到,说new和delete一般都是成对出现的!
但我想问的是,我new一个窗体的对象,然后窗体关闭的时候,它的析构函数不是已经把它占的内存释放了吗?为什么还要delete呢?
[/Quote]
析构函数在域结束后调用的,你new出来的那个域不会自动结束的,在堆里面。
你要自己调用它析构函数,delete就是有这个功能的。


“然后窗体关闭的”,--------但它仍占有内存资源。
chin_chen 2009-03-17
  • 打赏
  • 举报
回复
但是你析构函数什么时候调用了???
不就是在delete时候调用的。
topwork 2009-03-17
  • 打赏
  • 举报
回复
你说的是C++还是C#。
C++只要你new了,一般情况下都要delete。你说的情况也需要。
lugaideath1 2009-03-17
  • 打赏
  • 举报
回复
那么如果我在我的窗体里面new一个dialog,那么我delete应该写到哪里保证当我关闭这个dialog的时候同时释放这个dialog的内存呢?怎样可以做到及时回收呢?
jakqigle 2009-03-17
  • 打赏
  • 举报
回复
c++不想JAVA有自动回收机制,需要我们做内存的回收处理的。如果new后自己不delete的话,内存可能会溢出。
liuysheng 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 lugaideath1 的帖子:]
我昨天在书上看到,说new和delete一般都是成对出现的!
但我想问的是,我new一个窗体的对象,然后窗体关闭的时候,它的析构函数不是已经把它占的内存释放了吗?为什么还要delete呢?
[/Quote]

析构函数不会释放new出来的空间的...也就是说自己在栈上分配的空间,都得自己去处理,否则会出现问题.....

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧