指向类的指针 和 类的实例(100分)

  • 主题发起人 主题发起人 无才
  • 开始时间 开始时间

无才

Unregistered / Unconfirmed
GUEST, unregistred user!
pEdit=^TEdit;

Edit1 : TEdit;

这两者有什么区别吗?
var Ap : PEdit;
procedure Tform1.FormCreate(Sender : TObject);
begin
New(Ap);
Ap^ := Edit1
// 这里运行时会出现错误 如何在这里让PEDIT 和 EDIT1联系起来?
end;
procedure Tform1.destory;
begin
// 如果上面过程的赋值完成的话
Ap := nil
//这里需要做这步吗?
end;
 
》》Ap^ := Edit1
// 这里运行时会出现错误 如何在这里让PEDIT 和 EDIT1联系起来?
我的机子上没有错。
》》Ap := nil
//这里需要做这步吗?
需要,不过这里应该用dispose(ap);
 
你出错信息是什么?
 
在汇编级别上 对象名本身是指针
而且类是构造在堆(Heap)上且只能在堆上
所以Edit1本身是指向堆上的(Edit)的实例;
|
|——> TEdit;
所以pEdit 是指向指针的指针 是没必要的
 
非要用这个吗?
用Edit1 := TEdit.Create;和Edit1.free;
不行吗?
 
错了不是
DELPHI 中 对象类形变量,本身就是指向类实例的指针
你New 了一个指针
这时P 指向 Nil 即 $FFFF 你再向P^的地址赋值当然就出错了
 
没错地。
type
Edit1: TEdit;
end;
pEdit=^TEdit;
var
Form1: TForm1;
Ap : PEdit;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
New(Ap);
Ap^ := Edit1;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Dispose(ap);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Ap^.Text :='savenight say hello to u!';
end;
 
后退
顶部