delphi中创建对象问题(100分)

  • 主题发起人 主题发起人 seagull007
  • 开始时间 开始时间
S

seagull007

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中创建对象,有的用frmEditAreaSemiType := TfrmEditAreaSemiType.Create(Application);<br>有的用CDS_Params := TClientDataSet.Create(nil);有的用org := TOrganize.Create;<br>有的用frmFindSourceBillForASIB := TfrmFindSourceBillForASIB.Create(Self);这几种(Create(Application),Create,Create(Self),Create(nil))有什么区别,
 
哪位兄弟晓得说一下哈
 
就是创建对象时候的宿主<br>Create(Application) 基于框架,主程序<br>Create(Self) &nbsp; &nbsp; &nbsp;也就是自己<br>Create(nil) &nbsp; &nbsp; &nbsp;空<br>指定为空,要自己释放资源
 
Create(Application),是主工程创建,创建后的对象无需释放,在工程释放时自然释放其创建的对象;<br>Create,Create(Self),一般是form创建,同上,无需释放,form释放时随之释放;<br>Create(nil),创建时没有宿主,所以需要自己手动释放,Free。
 
同意wubo830814<br>顺便接分
 
比如:我创建Qery := TADOQery.Create,后边是要写哪一种呢,写成Qery := TADOQery.Create(self)吗,如果写成这样,需要释放不
 
我一般都写成<br><br>Qery := TADOQery.Create;<br>&nbsp; &nbsp;......<br>Qery.Free;<br><br>这样写比较安全。
 
哪究竟在哪种情况下用哪种创建方式, 比如一般创建什么对象时用什么方式,有没有一个大概的规定哦
 
Create(Owner);<br>里面是指向Owner,Owner释放会释放相应的对象
 
是不是可以这样说,我创建一个Query,用 TADOQery.Create(Application),TADOQery.Create(self),TADOQery.Create(nil)都可以,但用TADOQery.Create(Application)是在工程释放后才释放创建的对象Query,用TADOQery.Create(self)是在创建的窗体释放后释放创建的对象Query,用TADOQery.Create(nil)要自己写释放代码,我这样理解对不对
 
强烈推荐你把刘艺的<br>《delphi面向对象编程》看看,讲得很好,是一本非常好的书
 
谢谢lisongmagic,但我还是想有兄弟把我问的"是不是可以这样说,我创建一个Query,用 TADOQery.Create(Application),TADOQery.Create(self),TADOQery.Create(nil)都可以,但用TADOQery.Create(Application)是在工程释放后才释放创建的对象Query,用TADOQery.Create(self)是在创建的窗体释放后释放创建的对象Query,用TADOQery.Create(nil)要自己写释放代码,我这样理解对不对",回答一下
 
你的理解基本正确,其实用那种方法都可以,区别不是太大,关键是你的代码要注意。
 
呵呵,谢谢各位兄弟,结贴
 
后退
顶部