一个关于指针和构造函数的问题,在线等

Tackie 2005-04-04 02:20:52
代码如下:
type
TDemo = class
private
fDemoList: TList;
public
constructor Create;
destructor Destory;
end;
PDemo = ^TDemo;

TForm1 = class(TForm)
btnTest: TButton;
procedure btnTestClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

constructor TDemo.Create;
begin
fDemoList := TList.Create;
end;

destructor TDemo.Destory;
begin
fDemoList.Free;
end;

{$R *.dfm}

procedure TForm1.btnTestClick(Sender: TObject);
var
DemoTest: PDemo;
begin
New(DemoTest);
end;

我发现在New(DemoTest)的时候,TDemo的构造函数并没有被调用,这是怎么回事呢?
...全文
92 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tackie 2005-04-04
  • 打赏
  • 举报
回复
刚刚试了一下,的确就是你所说的那样,虽然是局部变量,但是没有被释放。
多谢楼上这位。

beyondtkl 2005-04-04
  • 打赏
  • 举报
回复
如果这个a是一个局部变量,那么在声明它的函数的出口处,它会不会被析构掉?
如果被析构了,那么我怎么避免这个问题,我这个链表在很多地方都要使用。

--------------
不會。。。當初 delphi這樣設計的目的就有把垃圾回收考慮進去的

因為你雖然它是局部變量 但是你把它加入到某個list中 所以它的引用奇數還不為0 所以可用。。。

跟C++ 是有很大的差別。。
1. 不會自動構造
2. 不會自動析構
Tackie 2005-04-04
  • 打赏
  • 举报
回复
楼上这位,继续请教:
如果这个a是一个局部变量,那么在声明它的函数的出口处,它会不会被析构掉?
如果被析构了,那么我怎么避免这个问题,我这个链表在很多地方都要使用。
beyondtkl 2005-04-04
  • 打赏
  • 举报
回复
C++ 的構造函數是自動調用的

而delphi需要手工調用。。。構造函數 以constructor key-word修飾 名稱任意。。

//
实际上,我是想建立一个TDemo对象的链表,所以不想用TDemo.Create的办法,就想用指针来实现。

//delphi的class(not record)的對象就是引用 不需要用到指針了

class A;
vector <A&>
vector <A*> 引用也能替代指針了。。 而且很好用

delphi中:
a: A;
lst: TList;
lst.Add(a); // ok ...
Tackie 2005-04-04
  • 打赏
  • 举报
回复
实际上,我是想建立一个TDemo对象的链表,所以不想用TDemo.Create的办法,就想用指针来实现。
nyf1220 2005-04-04
  • 打赏
  • 举报
回复
必须TDemo的在create下吧。
solokey 2005-04-04
  • 打赏
  • 举报
回复
DemoTest:= PDemo.Create;
Tackie 2005-04-04
  • 打赏
  • 举报
回复
楼上这位说的好,那么我应该怎么做呢?
SeaWave 2005-04-04
  • 打赏
  • 举报
回复
procedure TForm1.btnTestClick(Sender: TObject);
var
DemoTest: PDemo;
begin
New(DemoTest);
end;

----
这段代码只是为DemoTest这个指针分配了一小段内存空间(在32位机器上是四字节),DemoTest本身是一个指针,指向一个对象(TDemo对象),但是NEW并不保证它指向的对象会被创建,很明显楼主把PASCAL和C++弄混了。
solokey 2005-04-04
  • 打赏
  • 举报
回复
书上说New过程分配一个新的指针变量或旧式的Object类型的变量...
solokey 2005-04-04
  • 打赏
  • 举报
回复
New只是分配内存.没有Initialize

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧