我设计一个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) 取大小, 实际占内存会大一点点