Beberapa waktu lalu ada seorang teman bertanya kepada saya mengenai perbedaan yang ada antara method "Free" dan "Destroy" yang terdapat di dalam Delphi dan kenapa penggunaan "Free" lebih direkomendasikan?
Konsepnya sederhana, di dalam Delphi setiap objek akan mewarisi method Destroy (disebut juga dengan destructor) -- yang sebenarnya telah didefinisikan di dalam kelas TObject (induk dari semua objek di dalam hirarki kelas yang ada). Method ini digunakan untuk membebaskan memori yang telah dialokasikan. Perlu Anda ketahui bahwa pada saat kita melakukan instansiasi sebuah objek, sebenarnya kita juga mengalokasikan sebuah pointer yang nilainya menunjuk ke alamat tertentu.
Dalam dokumentasi Delphi disebutkan bahwa kita sangat dianjurkan untuk menggunakan method Free daripada Destroy dalam mendealokasikan sebuah objek dari memori. Mengapa demikian? Pada dasarnya method Free juga akan memanggil method Destroy, akan tetapi dalam method Free terdapat sebuah pengecekan terlebih dahulu terhadap pointer/objek yang akan dibebaskan -- nil atau tidak? -- Bila pointer tidak sama dengan nil, maka method Free secara otomatis akan memanggil method Destroy. Akan tetapi, bila ternyata pointer tersebut bernilai nil, maka method Free tidak akan melakukan apa-apa.
Untuk lebih jelasnya, coba Anda perhatikan implementasi dari method Free yang terdapat pada kelas TObject (kodenya dapat Anda lihat pada unit System di dalam Delphi), seperti berikut:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
Berikut ini contoh kode yang akan menunjukkan perbedaan di antara kedua method tersebut.
interface
uses Classes;
type
TContoh = class
// daftar property dan method
end;
implementation
// menggunakan method Destroy
procedure Form1.Button1Click(Sender: TObject);
var
x : TContoh;
begin
x := nil; // mencoba untuk memaksa agar pointer x bernilai nil
x.Destroy; // ERROR, menyebabkan "access violation"
end;
// menggunakan method Free
procedure Form1.Button1Click(Sender: TObject);
var
x : TContoh;
begin
x := nil;
// Tidak menyebabkan masalah karena method Destroy memang tidak pernah dipanggil
x.Free;
end;
Feb 28, 2006
Perbedaan Method "Free" dan "Destroy" di Delphi
at
1:47 PM
·
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment