Wyciek pamięci

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;
}
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.

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

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).

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