var vObjectList:TObjectList;
vObject:TObject;
begin
vObject:=TObject.create;
vObjectList.add(vObject);
.
.
.
.
//如果此时vObject已经释放掉了
vObjectList.delete(0); //执行此句会出错
//请问如何判断 vObjectList.Items[0] 已经被释放了end;
vObject:TObject;
begin
vObject:=TObject.create;
vObjectList.add(vObject);
.
.
.
.
//如果此时vObject已经释放掉了
vObjectList.delete(0); //执行此句会出错
//请问如何判断 vObjectList.Items[0] 已经被释放了end;
解决方案 »
- 如何防止外部程序EDIT文本框的值被更改?
- indy在异外断网\网络状态不好,他有这样的功能来检测吗?如果没有那INDY比SOCKET好在哪里?
- 一个关于数据库记录移动事件的问题,解决马上给分!!!!
- 怎么样把一个数据库里面的所有的表名导到combobox呢?
- 关于access打包问题
- 这句什么意思!?
- 请教 用delphi如何与mysql进行连接?
- idhttp咋处理服务器不间断连接推送来的数据?
- 枚举子窗口不成功?
- 发红包了,发红包了!再次进行大放分!!! Second Edtion SP1
- 关于mxOutlookBar控件的开发
- Delphi7 开发环境奇怪问题-属性编辑器中双击无法自动添加事件
然后结合 liangyong007a 的判断。
我重载了这个对象的双击事件,在里面进行的释放,这时候应该怎么做?应该则样判断?
PNewObject = ^TNewObject;
TNewObject = class
destructor Destroy; override;
private
public
This: PNewObject; // 存放指向当前实例的指针
end;...destructor TNewObject.Destroy;
begin
if Assigned(This) then This^ := nil;
inherited;
end;那么使用对象的代码可以这样写:procedure TForm1.FormCreate(Sender: TObject);
var
NewObj: TNewObject;
begin
NewObj := TNewObject.Create;
NewObj.This := @NewObj; // 传递对象指针
NewObj.Free;
Assert(not Assigned(NewObj)); // 断言NewObj在Free后为nil。
end;