Delphi 如何销毁阵列中的阵列
上面是声明,使用后我要销毁数组中的数组Delphi 如何销毁阵列中的阵列,delphi,delphi-xe2,Delphi,Delphi Xe2,上面是声明,使用后我要销毁数组中的数组 myarr : array [0 .. 21] of array [0 .. 21] of TColor; 这两个代码都给了我错误 E2018需要记录、对象或类类型(Delphi) 这实际上是在一个类中实现的,我想在类的对象被销毁时这样做 我在执行鼠标单击时实现了这一点,必须销毁上一个对象(包括此数组)并创建一个新对象。实际上,当发生这种情况时,它们必须没有多余的内存,但当我在windows任务管理器中为每次单击选中此项时,会添加另一个200 kb,我的
myarr : array [0 .. 21] of array [0 .. 21] of TColor;
这两个代码都给了我错误
E2018需要记录、对象或类类型(Delphi)
这实际上是在一个类中实现的,我想在类的对象被销毁时这样做
我在执行鼠标单击时实现了这一点,必须销毁上一个对象(包括此数组)并创建一个新对象。实际上,当发生这种情况时,它们必须没有多余的内存,但当我在windows任务管理器中为每次单击选中此项时,会添加另一个200 kb,我的应用程序将多次执行此操作。
t颜色是整数类型、值类型,而不是类。因此,它不需要被释放。t颜色的定义是
for a := 0 to 21 do
for b := 0 to 21 do
myarr[a][b].destroy ;
//myarr[a,b].destroy ;
因此,为了AllAction的目的,数组相当于
TColor = -$7FFFFFFF-1..$7FFFFFFF;
这种数组的元素不需要释放。数组本身将被自动释放,无论您在何处声明它(全局、本地、类成员、记录成员)。它也是一种值类型
不需要释放TColor
的最佳线索是,您一开始从未创建过它。分配和解除分配始终成对进行
另外,你不应该直接调用Destroy
。只有在为类实现重写的析构函数时,才能在代码中写入Destroy
,例如:
myarr: array [0..21] of array [0..21] of Integer;
destructor Destroy; override;
...
destructor TMyClass.Destroy;
begin
FMyObject.Free;
inherited;
end;
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
当你来销毁一个物体时,你应该对它调用Free
。不要直接调用销毁。为什么不呢?嗯,Free
是这样实现的:
myarr: array [0..21] of array [0..21] of Integer;
destructor Destroy; override;
...
destructor TMyClass.Destroy;
begin
FMyObject.Free;
inherited;
end;
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
你不能也不需要破坏一个静态数组。为什么-1,请告诉我一个我也想知道的原因@vibeeshanRC,你不能摧毁它。如果它是一个类数组,则可以,但TColor不是一个类。你能发布更多的代码吗?t颜色只是一个整数。它是一种值类型,不需要销毁。不管它值多少钱,不要叫毁灭,而是叫自由。但是这个建议是针对对象的。@vibeeshanRC David Heffernan已经给了你答案和未来的提示,现在让我给你一个提示,按住CTRL键,鼠标点击TColor,IDE会带你去声明类型,其他类型也一样,假设你有一个类似“var a:TStringList;”的var声明,按住CTRL键,鼠标点击“TStringList”找到它的定义,这样你就可以知道一个变量是否需要释放,而且,你可能想使用“FreeAndNil(AVARIABLE)”而不是调用。Free“谢谢,我的问题实际上并不准确,但你的回答让我明白了我该怎么做