父控件释放后是否其所包含的控件都被释放资源?
第1钟情况:
比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?第2种情况
如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?
第1钟情况:
比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?第2种情况
如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?
如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?這種情況可以肯定GroupBox Free後Edit也会被释放的.
比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?如果adoquery的Owner为Form的话, Form释放后, ADOQuery也会被释放的, 不占用ADOConnection.依我的理解,指定Owner为TComponent对象的可以由Owner释放,
而对Owner不是TComponent对象的需要编写代码释放
不知道我说的对不对
比如,窗体form执行close后,其中的adoquery是否也被释放掉连接,不占用adoconnection?
//close不代表会free窗口form,当然也不会free adoquery
//如果free窗口form1的话。组件的owner 是form1的话,这个组件也会free掉,否则不会。
//设计期时拖放在form1上的组件owner都是form1第2种情况
如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?
//是(如果你的edit不是动态创建,而且没有指定owner的话)
TComponent对子控件的释放过程是free——〉TObject.free——〉Destroy——〉
DestroyComponents——〉 while FComponents <> nil do
...
Instance := FComponents.Last;
...Instance.Destroy
------------------------------------
具体子控件内存的释放过程
是在TObject.FreeInstance里调用
procedure TObject.FreeInstance;
begin
CleanupInstance;
_FreeMem(Self);
end;至于说调用Destory以后会不会马上释放内存,
在帮助里有这么一段话(用FreeInstance 索引):
All destructors call FreeInstance automatically to deallocate memory that was allocated by overriding NewInstance.
由于是由destructors来自动调用FreeInstance 的,
我想应该有一套默认的规则来决定是否立即释放内存,
不过这个应该不用程序员来操心了吧
--------------
如果窗体指定了CloseAction := csFree,在Form关闭的时候,因为Form是子控件的Owner
所以它上面的控件可以被释放第二种情况
如果我在groupbox中创建很多edit,当我执行groupbox。free后是否edit的内存也被释放了?
---------------------
如果是用设计器摆放的控件,由于groupbox和edit的Owner都是Form
所以groupbox.free以后,groupbox上面的edit是不会被释放,需要等到Form.free才行