Delphi – Objekti i organizacija memorije

Menadžment memorije je vrlo bitno kako u opštem programiranju, tako i u razvoju aplikacija u Delphi okruženju. Dva osnovna pravila kojih se uvek treba držati u vezi sa memorijom su: morate osloboditi resurse koji su bili zauzeti kreiranjem bilo kog objekta, i morate ih osloboditi „samo jednom“. Inače, Delphi podržava tri tipa organizacije memorije za dinamičke elemente (elementi koji nisu u steku i globalnom području memorije):

  • Svaki put kada kreirate neki objekat, potrebno je da ga „uništite“ (oslobodite zauzete resurse). Ako ne uradite tako, memorija koja je zauzeta ovim objektom neće biti dostupna za druge objekte, i to sve dok se sam program ne okonča.
  • Kada kreirate komponentu, možete odrediti posednika komponente prosleđivanjem posednika konstruktoru komponente. Posednik komponente (najčešće forma) je zatim odgovoran za destrukciju svih objekata (forma za sve komponente na formi) koje poseduje. Pa tako, ako kreirate komponentu i dodelite joj posednika, nemojte zaboraviti da je oslobodite.
  • Kada alocirate memoriju za stringove, dinamičke nizove, i objekte referencirane interfejs varijablama, Delphi automatski oslobađa zauzetu memoriju kada reference izlaze iz područja definisanosti. Nema potrebe da oslobađate stringove; kada postanu nedostupni, memorija se automatski oslobađa.

Druga vrsta problema može da se javi ako pozovete dva puta destruktor za isti objekat – vratiće vam se greška. Destruktor predstavlja metodu koja služi dealociranju memorijskog prostora. Mi sami možemo napisati programski kod za destruktor, i time preduhitriti podrazumevani Destroy destruktor, u slučaju potrebe da izvršimo neki kod pre same destrukcije.

Naravno, u vašem programskom kodu ne morate ručno upravljati dealokacijom memorije – ovo je nešto što će Delphi uraditi za vas. Destroy metoda predstavlja virtuelni destruktor klase TObject. Najveći broj klasa koje zahtevaju „čišćenje“ koda kada se objekti destruktuiraju, zaobilaze ovu virtuelnu metodu. Razlog zbog kojeg nikada ne bi trebalo da definišete novi destruktor jeste to što se objekti najčešće poništavaju pozivom Free metode, a ova metoda umesto vas poziva Destroy virtuelnog destruktora. Free metoda je metoda koja pripada TObject klasi, a nasleđuju je sve ostale klase.

Pratite Krstaricu na www.krstarica.com