ďťż

Ładny brzuch

Witam! :)
Jak zrobić, aby w poniższym programie usunąć egzemplarz nc2 poza blokiem, w którym został zadeklarowany(jeśli w ogóle to możliwe). Bo jak wyczytałem z MegaTutoriala to do operatora new w ogóle nie stosuje się pojęcia zasięgu.

#include <iostream> using namespace std; class newclass { int a, b, c; public: newclass() {  a = b= c = 0;  cout << "Konstrukcja...\n"; } ~newclass() {  cout << "Destrukcja...\n"; } }; int main() { newclass nc1; {  cout << "Definicja nc2...\n";  newclass *nc2 = new newclass; // czy można zrobić, aby nc2 zwolnić poza tym blokiem? } cout << "Koniec zasiegu nc2...\n"; delete nc2; // błąd!!! return 0; }
Za pomoc dzięki :)
Użytkownik comp123 edytował ten post 16 lipiec 2005, 17:48


Zadeklaruj wskaznik jako globalny ;)


Witam! :)
Jak zrobić, aby w poniższym programie usunąć egzemplarz nc2 poza blokiem, w którym został zadeklarowany(jeśli w ogóle to możliwe). Bo jak wyczytałem z MegaTutoriala to do operatora new w ogóle nie stosuje się pojęcia zasięgu.

code snippet removed;)
Za pomoc dzięki  :)

Twoj przyklad to klasyczna sytuacja na piekny wyciek pamieci :). new utworzyl - ale zmienna (wskaznik) byla lokalna - po wyjsciu z bloku ulegla zniszczeniu, natomiast obiekt jest dalej w pamieci :).

Masz dwa wyjscia - albo to co TeMPOraL powiedzial, albo uzycie inteligentnych wskaznikow (np shared_ptr z boost-a). Nie bedziesz mial wtedy problemu bo shared_ptr sam zniszczy obiekt przy wyjsciu z bloku.

Osobiscie preferuje drugie rozwiazanie - w wiekszych projektach moze Ci uratowac zycie :)

// Edit - ofkoz pomijam fakt ze sam delete nie widzi "nc2" - chodzilo mi raczej o ten glebszy problem z wyciekami :)

Pozdr.
st3tc
Użytkownik st3tc edytował ten post 16 lipiec 2005, 19:42



(...) uzycie inteligentnych wskaznikow (np shared_ptr z boost-a). (...)


St3tc, pytanko: Ty używasz boost::shared_ptr, czy pisałeś własny? Ja w tej chwili używam własnego smart pointera w ramach garbage collectora.


Aktualnie boost-a. W sumie wystarcza mi - zabezpiezenie jest. Nie mialem juz sily/ochoty pisac wlasnych implementacji (odeszla mi przy pisaniu wlasnych kontenerow - z trudem dobilem do performance STLPort-a (ale przegralem w "kilku" testach :) ) i ... odpuscilem sobie  - na pocieszenie (siebie) dodam ze rozwalilem w pyl dinkumware ;]).

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •