Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание самоуничтожающегося объекта

Delphi , Компоненты и Классы , Создание компонент

Создание самоуничтожающегося объекта

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

type
   ISelfDestroy = interface;
   //forget about GUID, if you are not using COM 

  TSelfDestroy = class(TInterfacedObject, ISelfDestroy)
   private
     FObject: TObject;
   public
     constructor Create(AObject: TObject);
     destructor Destroy; override;
   end;


 implementation


 constructor TSelfDestroy.Create(AObject: TObject);
 begin
   FObject := AObject;
 end;

 destructor TSelfDestroy.Destroy;
 begin
   FreeAndNil(FObject);
   inherited;
 end;


 // So when you use, just do like this... 

procedure TForm1.Button1Click(Sender: TObject);
 var
   MyObject: TMyObject;
   SelfDestroy: TSelfDestroy;
   begin
   MyObject    := TMyObject.Create;
   SelfDestroy := TSelfDestroy.Create(MyObject);
   // The MyObject will free automatically as soon as TSelfDestroy 
  // goes out of scope. 
  // Carry on your code here... 
end;

Пример самоуничтожающего объекта в Delphi!

Эта реализация предоставляет способ создания объекта, который принимает владение другим объектом и обеспечивает его правильное освобождение, когда самоуничтожающий объект выходит из области видимости.

Давайте разберемся с кодом:

Интерфейс ISelfDestroy

type
  ISelfDestroy = interface;

В этом интерфейсе не определены методы или свойства, но он служит маркером для указания, что класс реализует этот интерфейс.

Класс TSelfDestroy

TSelfDestroy = class(TInterfacedObject, ISelfDestroy)
  private
    FObject: TObject;
  public
    constructor Create(AObject: TObject);
    destructor Destroy; override;
end;

Класс TSelfDestroy наследуется от TInterfacedObject, который обеспечивает интерфейсы COM-стиля. Класс реализует интерфейс ISelfDestroy. У него есть приватное поле FObject типа TObject, которое будет хранить ссылку на другой объект.

Конструктор и Деструктор

constructor TSelfDestroy.Create(AObject: TObject);
begin
  FObject := AObject;
end;

destructor TSelfDestroy.Destroy;
begin
  FreeAndNil(FObject);
  inherited;
end;

Конструктор Create принимает объект типа TObject в качестве параметра и присваивает его приватному полю FObject.

Деструктор Destroy переопределяется для освобождения объекта, хранящегося в поле FObject, с помощью FreeAndNil. Это обеспечивает правильное освобождение объекта, когда самоуничтожающий объект выходит из области видимости.

Пример использования

procedure TForm1.Button1Click(Sender: TObject);
var
  MyObject: TMyObject;
  SelfDestroy: TSelfDestroy;
begin
  MyObject := TMyObject.Create;
  SelfDestroy := TSelfDestroy.Create(MyObject);
   // Объект MyObject будет освобождаться автоматически, когда TSelfDestroy выйдет из области видимости.
   // Продолжайте свой код здесь...
end;

В этом примере создается объект TMyObject, а затем передается в конструктор класса TSelfDestroy. Когда объект SelfDestroy выйдет из области видимости (например, в конце процедуры), его деструктор будет вызван, который, в свою очередь, освободит объект MyObject.

Эта реализация предоставляет способ обеспечить правильное освобождение объектов, когда они выходят из области видимости, даже если они не освобождаются явно с помощью Free или Dispose. Это может быть полезно в ситуациях, где необходимо тщательно управлять ресурсами.

В целом, это умелый и эффективный способ управления жизненным циклом объектов в Delphi. Хорошая работа!

Создание самоуничтожающегося объекта в Delphi позволяет создавать интерфейс, который автоматически уничтожает связанный с ним объект при уходе из области видимости.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Создание компонент ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-10 19:46:45/0.0034501552581787/0