能用什么方法判断对象指针已经丢失?(20分)

  • 主题发起人 主题发起人 loskiller
  • 开始时间 开始时间
L

loskiller

Unregistered / Unconfirmed
GUEST, unregistred user!
现有两个全局变量btn1,btn2.
先创建btn2;=TButton.create(nil);
然后再赋值btn1:=btn2
最后btn2.free;
这时btn1的指针已经丢失了,能用什么方法判断。assigned不行啊。
 
简单的说就是没有办法(no way).
 
正常方式好像没办法,这样倒是可以
try
btn1.Caption;
except
//
end;
 
同意楼上的。
运行时可以这样。调试时会提示。
 
try except也是不行的,访问一个悬空指针会导致不可预料的后果.
也就是说也可能根本不出错。 
 
创建时拥有者为nil是不能使用assigned的,
一般情况下,如果要创建拥有者为nil的对象,要用try finnally.否则很容易出现内存泄露!
建议楼主加个拥有者吧!

如果非得回答楼主的问题,我也不知道!呵呵!
 
procedure TForm1.Button1Click(Sender: TObject);
var
tmpBtn1, tmpBtn2: TBitBtn;
begin
tmpBtn1 := TBitBtn.Create(nil);
tmpBtn1.Parent := Self;
tmpBtn1.Visible := True;
tmpBtn2 := tmpBtn1;
tmpBtn1.Free;
try
tmpBtn2.Caption := 'Hello';
except
ShowMessage('指针已经丢失');
end;
end;

如果不对内存进行操作就可能不会报错,对内存进行操作应该会报错,比如tmpBtn2.Caption := 'Hello';
 
多人接受答案了。
 
后退
顶部