new和delete 的问题

amfer 2003-08-29 12:17:27
像TList,TStringList,TBookMark这样的不可件的东西,new了之后要不要delete?
如果把所有要delete 的东西放在__finally中,是否保证一定能够被delete

new的时候:比如new TForm(this),中的this,Application和NULL到底有什么区别?
...全文
19 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjlsmail 2003-08-29
  • 打赏
  • 举报
回复
可以

TComponent *Component = new TComponent(Classes::TComponent* AOwner[, int Dummy]) ;

// 对象的 Owner 负责对象的构造和拆构(当 Owner 对象释放时释放基于它的控件)

this ---- TForm1 ; // 和 Delphi 中的 Self 同义
Application ---- TApplication //
NULL ---- 有对象自己负责拆构

Tiejun_Chenfang 2003-08-29
  • 打赏
  • 举报
回复
你new的原则上你要delete,但个别的如form等,可又owner负责删除

TForm(this)中的参数,就是谁是form的owner

this 执行这句话的对象的指针,一般是主form(或另外一个form) ,那么,如果你不delete 该form的话,当主form(或另外一个form)消亡时,主form(或另外一个form)会帮你delete 该form

Application 应用程序对象,如果你不delete 该form的话,当应用程序消亡时,应用程序会帮你delete 该form

NULL 没有owner,只好你自己delete了

当new TForm(this)在应用程序对象对象范围内时,this指的是Application,两者没区别了


amfer 2003-08-29
  • 打赏
  • 举报
回复
如果某个组件没有Owner,那么如果不手动delete,这个组件在内存中将一直存在,是吗?
amfer 2003-08-29
  • 打赏
  • 举报
回复
这么说在new xxx(...)括号中的this,Application就是这个组件的Owner喽,有没有可能某个组件没有Owner?
Wingsun 2003-08-29
  • 打赏
  • 举报
回复
原则上都应该调用正确的delete来释放内存。

VCL的东西原则上可以由它的Owner来负责他的生命周期,建议不要那样做。
winespirit 2003-08-29
  • 打赏
  • 举报
回复
最好自己Delete,还有,要显式释放List里面的指针
nuaacims 2003-08-29
  • 打赏
  • 举报
回复
不是因为TListTStringList不可见,所以可以new了不delete,而是它建立之后,虽然你没有手动delete,但是都会由它们的Owner负责析构...

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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