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