gpt4 book ai didi

delphi - 创建指向类的新指针

转载 作者:行者123 更新时间:2023-12-03 18:10:41 24 4
gpt4 key购买 nike

我想创建一个指向名为“CustomParam”的类的指针,所以我声明了

pCustomParam = ^CustomParam

CustomParam 类有以下类变量,在构造函数中应设置为 0:

var keyArray: array of String;
var valueArray: array of String;
var paramArray: array of pCustomParam;
var isParamArray: array of Boolean;
var size: Integer;

构造函数看起来像这样:

constructor CustomParam.create;
begin
inherited;
size:= 0;
SetLength(keyArray,0);
SetLength(valueArray,0);
SetLength(isParamArray,0);
SetLength(paramArray,0);
end;

并且是这样声明的:

constructor create; overload; 

现在我尝试使用“new”创建指向 CustomParam 的指针,如下所示:

var pointerToCustomParam: pCustomParam; 
begin
new(pointerToCustomParam);

但它不会跳转到 CustomParam 类的构造函数。如果我像下面这样手动调用构造函数:

pointerToCustomParam^.create; 

应用程序将在 SetLength 命令上崩溃。

我注意到,变量“pointerToCustomParam”在“new”函数之后直接得到了垃圾内容。

希望你能帮助我,信息足够了:)

谢谢你:)

最佳答案

创建类型实例的正确方法是调用该类型的构造函数并将结果分配给该类型的变量:

var
Param: CustomParam;

Param := CustomParam.Create;

以这种方式创建的实例已经是引用,因此很少需要额外的指针。

如果你真的必须有一个指针,那么从声明类型开始:

type
PCustomParam = ^CustomParam;

然后声明一个变量:

var
Param: PCustomParam;

为它所指向的事物的内容分配内存:

New(Param);

这并不一定会为它指向的 CustomParam 引用分配一个有效值,但如果是,则分配值 nil。最后,为新分配的内存分配一个值:

Param^ := CustomParam.Create;

请注意我们仍然需要调用构造函数,并且我们永远不会在我们正在创建的对象上调用构造函数,因为在调用构造函数之前该对象不存在。

关于delphi - 创建指向类的新指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15498699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com