[ drki89 @ 29.01.2010. 18:52 ] @
Pogledao sam kako izgleda klasa string na jednom sajtu i primetio da nema destruktor. Probao sam da upoterbim operator delete nad objektom klase string, ali prevodilac to ne dozvoljava. Kako se onda dealocira prostor koji string zauzme?
[ X Files @ 29.01.2010. 19:19 ] @
Kada je objekat alociran na heap-u (new) onda tipicno ide i unistavanje (delete). Ako je objekat na stack-u, bice automatski uklonjen nakon izlaska iz tog bloka.

Dakle:
Code:

{
    // HEAP, treba delete
    NekaKlasa *objekat = new NekaKlasa();
    // ...
    delete objekat;
}


Code:

{
    // STACK, ne treba eksplicitno unistavanje
    NekaKlasa objeka;
    // ...
}
// objekat se unistava automatski nakon izlaska iz bloka {}


Mozda si na to mislio?

Inace, kod implementacije slozenijih klasa u C++, koriste se razni Design Pattern-i, sve je u template-ima, RAII pristup osiguravanja dealokacije, pa je nekada tesko pratiti gde se i kako vrsi oslobadjanje memorije.

Pogledaj i ovde, bilo je dosta tema o tome:
http://www.elitesecurity.org/t320974
[ drki89 @ 29.01.2010. 20:21 ] @
Da, na to sam mislio. Hvala!

Znam da se operatorom new alocira prostor na hipu, a kako funkcionise stek?
Je l' na njemu program automatski alocira i brise prostor?
Da li se sve promenljive stavljaju na stek kada se udje u deo programa u kom su vidljive, a brisu kada se njihov doseg napusti?
[ X Files @ 29.01.2010. 21:39 ] @
Na tom principu (garantovanog unistavanja objekta sa stacka nakon izlaska iz bloka) funkcionise takozvani RAII pattern, i cesto se koristi da se osigura izvrsavanje bitnog dela koda cak iako nesto "krene po zlu" pre nego se dodje do njega (recimo neko bitno oslobadjanje memorije ili osiguravanje da sistem ostane u ispravnom stanju nakon nekog neocekivanog izuzetka).

Ovde imas neke primene RAII koncepta:

(disable/enable vidljivosti nekih kontrola)
http://www.elitesecurity.org/p1232880

(kriticne sekcije i thread safe kod)
http://www.elitesecurity.org/p1745579