任何窗口都急需在OnClose事件中caFree吗
任何窗口都需要在OnClose事件中caFree吗?我完全不知道ActioncaFree是用来干什么的,我总是在窗口的析构函
任何窗口都需要在OnClose事件中caFree吗?
我完全不知道Action=caFree;是用来干什么的,我总是在窗口的析构函数中delete所有new出来的东西,但是最近从各种渠道看到用这条语句在关闭窗口时释放资源的例子,搞得我很困惑。
我说的“任何窗口”指的是依靠c++builder设计出来的窗口以及动态生成的窗口,后者如下:
TForm * form2=new TForm(this);
form2->Parent=this;
是不是都需要在响应OnClose事件的函数中写上
Action=caFree;
c++builder action caFree OnClose
[解决办法]应该无此必要
[解决办法]这是个TCloseAction枚举,有4个值
caNone
caHide
caFree
caMinimize
顾名思义,在窗体的OnClose事件中可以设置Action属性来做一些限定
比如要保证Close这个窗体前要做一个确认提示
void form1::OnClose(tobject sender)
{
是否确认要退出?
如果不是,那么 Action = caNone;
Close动作被取消,窗口不会关闭
}
caFree是单文档窗口的默认值,不必显示指定
[解决办法]另外
TForm * form2=new TForm(this);
// AOwner指明了this,就不要再手动delete form2,AOwner(这里假设是form1)会负责管理form2的生命周期,
// 如果手动delete form2 会发生重复delete的情况。
// TForm 是从TComponent继承下来的,TComponent维护着一个Awoner列表,
// TForm * form2=new TForm(this); 此时form2被加入了Awoner列表,当Awoner需要被清除时,
// TComponent 的析构函数中会一一销毁所有从属的TComponet。
// 只有当你不指定Awoner时才需要手动delete,TForm * form2=new TForm(NULL);delete form2;
[解决办法]TForm * form2=new TForm(this); // 生命周期由this管理,不用人为过问
TForm * form2=new TForm(NULL); // 效率更高,需要手动delete
//后者效率高是因为前者方式会递归调用TComponent中的虚函数Notification,(Notification负责维护前面说的那个awoner列表)。