搞不懂啦!!!
各位同好:
在 C++Builder中,动态创建一个组件
如Form3 = new TForm3(Form2);
这个Form2参数是一个TComponent类型的参数;当然也可写Application或其他的...
使用它我可以new 了Form3而不去delete Form3;
因为当Form2释放时,他会自动去释放 Form3所指向的内存区域;
毫无疑问,我这样写:
delete Form2;
delete Form3肯定是有问题的.因为Form3->的地方是memory freed;
But问题来啦!!!
偶这样写
delete Form3;
delete Form2;
没事!!!!
搞不懂啦!!!
看了vcl的源码,依旧百思不得其解!!!
问题点数:50、回复次数:7Top
1 楼storyxlx(风笛)回复于 2000-12-20 09:37:00 得分 0
很对呀,Form3里没有指向Form2的指针,删Form3对Form2怎么会有影响?Top
2 楼Wingsun(孙春阳)回复于 2000-12-20 10:20:00 得分 5
没有问题啊,你删除Form3但是不会删除Form3的Owner Form2。反过来就是对的。Top
3 楼keboy(青鸟)回复于 2000-12-20 13:46:00 得分 0
NO!!!
Form2所指向的对象里有一个私有的数据成员,FOwner;
当Form3 = new TForm3(Form2)时;
Form2所指向的对象里的FOwner就被赋作Form3了.
当我delete Form3;Form3对象删除;
我再delete Form2;
这时,~TForm2()会去delete FOwner;
而FOwner又指向Form3的内存地址,Form3又是析构了的,
应该会发生问题;Top
4 楼storyxlx(风笛)回复于 2000-12-20 14:23:00 得分 5
TForm *Form;
Form = NULL;
delete Form
会出错吗?
你不连续删,中间插个new TButton之类的东东试试。Top
5 楼whoo(谁)回复于 2000-12-20 14:36:00 得分 40
FOwner,是指Form2的所有者吧.应该是Form3.Fowner = Form2才对,不是Form2.FOwner = Form3.Top
6 楼keboy(青鸟)回复于 2000-12-20 15:43:00 得分 0
哦,好象对了.whoo说的没错.我又看了一下源码Top
7 楼keboy(青鸟)回复于 2000-12-20 17:56:00 得分 0
原来TComponent 还有TList作为保护机制.
怪说不得没问题!
但是whoo的回答没到点子上/Top




