用New()函数创建类的实例时遇到不定长属性的问题(50分)

  • 主题发起人 主题发起人 南京男生
  • 开始时间 开始时间

南京男生

Unregistered / Unconfirmed
GUEST, unregistred user!
如下一个类:
TMyObject = class
private
FName : String;
public
property Name :string read FName write FName ;
end;
我现在想建立一个 TMyObject的链表,在循环中调用New()函数时遇到string类型
属性赋值时会出错。如下:
procedure TForm1.Button1Click(Sender: TObject);
var P: ^TMyList;
begin
New(p);
p^.Name := '1';
********
end;

打*的句子会出错,请问各位:我该怎么处理?1、)是将FName 和Name给为定长类型的字符串?
2、)不用New()函数,自编clone函数???
谢谢,本人比较着急,麻烦大侠们照顾照顾。
 
用Create不就可以了,非要用new呀
procedure TForm1.Button1Click(Sender: TObject);
var
P: TMyObject ;
begin
P := TMyObject.Create;
p.Name := '1';
********
P.Free;
end;
 
to 楼上:
但是我创建的不只是一个实例,而是有可能动态创建成千个实例。
我目前采用的是定义了一个动态数组
arr:array of TMyObject;
然后初始化数组的长度,然后再来调用Create函数,但我不喜欢这样子做;
如果把TMyObject=record 时则可以用new(),然后如上赋值,
不知道类为什么不行?
 
类不行,你不信,你可以看哪个用NEW出来的类大小,如果我没有想错,应该是4,也就是
一个指针的大小32字节
 
C++里的NEW是调用的类的构造函数,DELPHI里的NEW是新建一个指针。
 
同意无忌兄的说法,不过问题是,在Delphi里,能否仿c++这样实现呢,否则要借助数组或者TList
等。
 

考虑一下动态数组。
 
多人接受答案了。
 
我最近看VCL代码,如果是在PURE PASCAL模式下,系统是用GETMEM来给
类分配内存,楼主可以考虑这种模式
 
后退
顶部