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