Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何销毁阵列中的阵列_Delphi_Delphi Xe2 - Fatal编程技术网

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“谢谢,我的问题实际上并不准确,但你的回答让我明白了我该怎么做