Wyciek pamięci

Odpowiedz Nowy wątek
2010-06-08 23:34
0

Czy poniższy kod może powodować wycieki pamięci?
Chodzi mi tutaj o delete this w zamian za delete egzemplarz;

#include <iostream>

class Klasa
{
public:
  Klasa()
  { 
  } 

  ~Klasa()
  {
    delete this;
  }

private:
std::string a;
};

int main()
{
  Klasa *egzemplarz = new Klasa;
  return 0;
}

Pozostało 580 znaków

2010-06-08 23:48
0

Moze sie myle, ale... Twoj destruktor nigdy nie jest wywolywany. Czyli Twoje delete this (cokolwiek by to mialo znaczyc w destruktorze - pewnie wywaliloby error proby zwolnienia zwolnionego juz wskaznika - oczywiscie po uzyciu: delete egzemplarz;) nie jest wywolywane.

Ale jesli sie myle, to z checia przeczytam, jaka jest poprawna odpowiedz.

Pozostało 580 znaków

2010-06-09 00:59
0

Może któryś z Panów zaproponuje, w jaki sposób zwolnić miejsce zajęte przez klasę.

Oprócz delete egzemplarz w main

Pozostało 580 znaków

2010-06-09 01:17
0

@[losowa nazwa] do chwili wywołania delete na jakimś obiekcie, bo potem nagle rekurencyjne wołanie destruktora cię zniszczy :P
@pcmcymc ty w ogóle zdajesz sobie sprawę z tego co zrobiłeś? Mam wrażenie że nie więc wyjaśnię:
Kiedy wywoływany jest destruktor? W chwili niszczenia obiektu. W przypadku obiektu lokalnego to jest chwila wyjścia poza zasięg, w przypadku obiektu alokowanego dynamicznie jest to chwila użycia delete. W twoim kodzie taka sytuacja nie zachodzi wiec obiekt nie zostaje zwolniony. Oczywiście po wyłączeniu programu ta pamięć i tak zosatnie zwolniona...
A teraz coś na temat twojego "delete this". Doszliśmy juz do tego ze destruktor wywoła sie tak czy siak dopiero w chwili wywołania delete na jakimś obiekcie. A teraz zastanówmy co sie własciwie stanie. Wołamy delete na jakimś obiekcie i program wywoła destruktor, wewnątrz destruktora znajduje delete this więc traktuje to tak jak zwykłe delete wywołane na dynamicznie zaalokowanym obiekcie i ... woła destruktor. Ten łańcuszek szczęścia zakończy się w chwili gdy skończy sie stos i program się wysypie.

I nadal nie rozumiem twojego problemu. Czemu jak normalny człowiek nie możesz sobie zwalniać tego obiektu skoro go stworzyłeś? Na 99% twój problem polega na złym zaprojektowaniu rozwiązania (z reguły kiedy ktoś szuka jakiejś dziwnej konstrukcji to taki jest powód).


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0