Delphi 如何创建无法销毁的实例

Delphi 如何创建无法销毁的实例,delphi,Delphi,假设我有一个类:TCantBeDestroyed 有人知道如何创建一种在两种情况下都无法销毁的实例,直接: 自由的; 破坏 并且不能被施法摧毁: TObjectCantBeDestroyed.自由; 毁灭;毁灭 Tks.您无法阻止任何人调用析构函数或Free,但您可以确保这样做没有任何效果: type TCannotBeDestroyed = class public destructor Destroy; override; procedure BeforeDestr

假设我有一个类:TCantBeDestroyed

有人知道如何创建一种在两种情况下都无法销毁的实例,直接: 自由的; 破坏

并且不能被施法摧毁: TObjectCantBeDestroyed.自由; 毁灭;毁灭


Tks.

您无法阻止任何人调用析构函数或Free,但您可以确保这样做没有任何效果:

type
  TCannotBeDestroyed = class
  public 
    destructor Destroy; override;
    procedure BeforeDestruction; override;
    procedure FreeInstance; override;
  end;

destructor TCannotBeDestroyed.Destroy;
begin
  //don't call inherited
end;

procedure TCannotBeDestroyed.BeforeDestruction;
begin
  //don't call inherited
end;

procedure TCannotBeDestroyed.FreeInstance;
begin
  //don't call inherited
end;

我无法想象你为什么要这么做

如果进程被终止怎么办?你真正想要实现什么?我想保护我的单身汉免受程序员的伤害p@SaCi:为什么不在析构函数中启动一个ESTUPIDP程序?@SaCi好吧,你真的会启动EDO而不是销毁这个单例,你的客户会很好。可以说,这比假装自由和反对但不这么做要好。这种做法可能会导致混乱。只要你告诉你的客户规则是什么,我想他们不太可能会在不释放singleton时遇到问题。@sertac问题是,异常信号表明程序员犯了错误,必须纠正错误,因此,如果引起泄漏,这并不重要。代码需要尽快修复。Tks太多了,我不知道FreeInstance。看,保证内存泄漏:-@Warren,如果对象应该在应用程序的生命周期内存在,那么它就不是泄漏。使用一些工具,您可以注册预期的内存泄漏。但是对于某些工具,您不能,即使在您可以的情况下,即使在对象自身单元的finalization部分中,对象也不能自行完成,这会导致对其他堆问题进行故障排除时出现一些问题。我有一个零泄漏的内存设计规则,对我来说,即使应该泄漏也不是一个足够好的理由。