gpt4 book ai didi

function - Delphi - 如果没有创建类,为什么这个函数可以工作?

转载 作者:行者123 更新时间:2023-12-03 14:57:01 24 4
gpt4 key购买 nike

考虑这个类:

unit Unit2;

interface

type

TTeste = class
private
texto: string;
public
function soma(a, b: integer): string;
end;

implementation

procedure TForm2.Button1Click(Sender: TObject);
var
teste: TTeste;
begin
teste:= nil;
teste.texto:= '';//access violation
showmessage(teste.soma(5, 3));//no access violation
end;

{ TTeste }

function TTeste.soma(a, b: integer): string;
begin
result:= (a+b).ToString;
end;

end.

它真的应该有效吗?为什么? var 崩溃了,但函数没有崩溃,它的工作方式像类函数吗?

最佳答案

这是有效的,因为您没有尝试访问该类的任何字段。该函数不需要任何内存分配。如果该函数中使用了 texto 字段,那么它将崩溃(正如您在其他测试中看到的那样),因为该内存未寻址。但这里不涉及内存。 ab(以及与此相关的函数结果)都在类之外的其他位置分配。实例化过程的一部分是为对象中的每个字段分配内存。

这只是巧合。仍然非常不鼓励实际使用这样的东西。如果您觉得需要在不实例化的情况下访问该函数,那么您应该将其设为类函数。

关于function - Delphi - 如果没有创建类,为什么这个函数可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866727/

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