Konstruktor dan destruktor

Kelas, instans kelas, konstruktor, destruktor

Dalam contoh di atas terdapat TAnimal dan subkelasnya TDog. Kelas hanyalah sebuah tipe data, dapat dipahami sebagai cetakan. Kelas itu sendiri tidak menyimpan data sama sekali, memori tidak akan dialokasikan untuk field MyInt: Integer pada contoh.

Meskipun variabel kelas memungkinkan kelas itu sendiri menampung data, hal ini tidak akan dibahas sekarang, kita hanya akan membahas kelas biasa dengan field umum.

Untuk mengalokasikan memori pada field, kamu harus membuat instans kelas; pembuatan instans memerlukan pemanggilan konstruktor.

Jika kamu tidak pernah membuat instans dari suatu kelas, kode kelas tersebut seolah tidak ada sama sekali, tidak akan dijalankan dan tidak ada memori yang dialokasikan untuk variabelnya. Kelas ibarat cetakan: memori hanya dialokasikan saat digunakan, jika tidak dipakai ia hanya diam tanpa menghabiskan sumber daya.

Konstruktor

  • Metode khusus yang dideklarasikan dengan kata kunci constructor;
  • Sistem akan mengalokasikan memori objek terlebih dahulu sebelum menjalankan kode konstruktor;
  • Semua kelas mewarisi TObject secara implisit, dilengkapi konstruktor tanpa parameter Create yang dapat dipakai tanpa penulisan manual;
  • Konstruktor buatan sendiri adalah cara terbaik untuk inisialisasi objek, bisa memberikan nilai awal pada field di dalam konstruktor;
  • Konstruktor buatan sendiri secara umum diberi nama Create.

Contoh kode

program Demo;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
{$codepage utf8}
uses SysUtils;

type
  TAnimal = class
  private
    InternalStuff: TObject;
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TAnimal.Create;
begin
  inherited Create; // Panggil konstruktor induk di awal
  InternalStuff := TObject.Create;
  Writeln('Jalankan konstruktor TAnimal.Create');
end;

destructor TAnimal.Destroy;
begin
  Writeln('Jalankan destruktor TAnimal.Destroy');
  FreeAndNil(InternalStuff); // Bebaskan objek anak internal
  inherited Destroy; // Panggil destruktor induk di akhir
end;

var
  C: TAnimal;
begin
  C := TAnimal.Create;
  try
    // Gunakan objek
  finally
    FreeAndNil(C); // Panggil destruktor Destroy secara otomatis
  end;
end.

Hasil eksekusi

D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
Linking mydemo.exe
38 lines compiled, 0.1 sec, 68672 bytes code, 4260 bytes data

D:\fpcdemo>mydemo
Jalankan konstruktor TMyClass.Create
Jalankan destruktor TMyClass.DestroyCode language: CSS (css)

InternalStuff adalah objek anak yang disimpan di dalam kelas. Dibuat saat konstruktor berjalan, dan harus dibebaskan menggunakan FreeAndNil di dalam destruktor guna mencegah kebocoran memori.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *