Class 我们在Delphi中创建的每个类都需要析构函数吗?

Class 我们在Delphi中创建的每个类都需要析构函数吗?,class,delphi,destructor,Class,Delphi,Destructor,在Delphi应用程序中创建自定义类时,我使用标准过程: TCustomClass = Class private var1,var2 : integer/string/Real/Boolean... procedure P1... function F1... public constructor Create; end; ... CustomClass := TCustomClass.create; 我想知道我是否总是必须创建析构函数过程,或者当应用程序关闭时资源是

在Delphi应用程序中创建自定义类时,我使用标准过程:

TCustomClass = Class
 private
  var1,var2 : integer/string/Real/Boolean...
  procedure P1...
  function F1...
 public
  constructor Create;
end;

...

CustomClass := TCustomClass.create;
我想知道我是否总是必须创建析构函数过程,或者当应用程序关闭时资源是否自动释放

我总是使用应用程序作为所有者,很少使用Self或Nil,我不记得在我在互联网上看到的类中有人声明析构函数,除了有人使用指针的那个类

是在Delphi中与C++一样的析构函数的逻辑,如在这个问题中描述的:

提前谢谢

编辑1:
正如免费咨询所提到的,我忘了说其中一个变量可能是TBitmap类型

如果你需要清理一些东西,比如分配的内存,它只需要有一个析构函数。例如,如果在构造函数中使用了TClassname.Create(…),则需要在析构函数方法中释放


当然,需要析构函数可能有很多不同的原因(一直到通知用户他的数据即将被擦除),但这是最常见的原因

如果我使用Bitmap:TBitmap.create初始化该类中的TBitmap变量,我是否必须调用析构函数?您不必调用析构函数,这是自动完成的;但是析构函数应该包括Bitmap.freestory,也就是说,我必须在类声明中声明析构函数。如果您已经在构造函数中分配了位图,那么您必须有一个包含Bitmap.free的析构函数。如果不这样做,就会造成内存泄漏,这将导致非常愤怒的用户。析构函数有时只会被自动调用——通常是具有非nil所有者的TComponent派生函数,或者如果您使用的是接口。其余时间,析构函数作为object.Free的一部分调用。Delphi中的每个类都已经有一个虚拟析构函数。问题是您是否需要覆盖它。如果您的类需要对此类获取的资源执行终结,而这些资源不是由超类终结的,请重写它。您应该在问题中包含您正在使用TBitmap成员的事实。