首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

小弟我设计一个delphi的类A,类A中一个变量为B类型的对象变量;小弟我在释放A类的对象时是否需要同时释放B类的对象

2012-02-24 
我设计一个delphi的类A,类A中一个变量为B类型的对象变量我在释放A类的对象时是否需要同时释放B类的对象?

我设计一个delphi的类A,类A中一个变量为B类型的对象变量;我在释放A类的对象时是否需要同时释放B类的对象?
比如:
A类为
type
  TAClass = class(TObject)
   
  private
   
  public
  BSubObj: TBClass;

  .............
//以上为类定义

var AObj: TAClass;
  BObj: TAClass;
Begin
  AObj := TAClass.Create;
  BObj := TBClass.Create;
  AObj.BSubObj := BObj;
  AObj.free; //请问在AObj.free之前是否还需要调用AObj.BSubObj.free来释放对象的内存空间?如何查看BSubObj和BObj所占内存空间的位置和大小?
  BObj.free;

end;

[解决办法]
一般情况下,按谁建立谁释放的原则办事准错不了
[解决办法]
//请问在AObj.free之前是否还需要调用AObj.BSubObj.free来释放对象的内存空间?如何查看BSubObj和BObj所占内存空间的位置和大小? 
 Re:

不需要,如果你释放了,就不需要以下代码
BObj.free; 

否则,会有访问违例错

看大小用 sizeof(TClassA);
看地址用 @BObj, 或Addr(BObj);



楼上都是**啊,竟然说要释放。。。。

[解决办法]
当然不用,BSubOjb只不过是对象的一个指针而已,你又不是在AObj内部创建的BSubObj对象。

当你使用:
AObj.BSubObj := BObj; 
只是将BObj的对象指针赋给BSubObj。也就是说,现在AObj.BSubObj和BObj指向了同一个对象。

这样想就清楚了吧?
[解决办法]
原则是谁建立谁释放
你上面没错, b 不是 a 建立的, a依赖b, 所以先 a.free, 再 b.free是正确的

Integer(a.BSubObj) 取出来的就是位置, sizeof(TB 或 a.BSubObj) 取大小, 实际占内存会大一点点

热点排行