PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ destructor



tsluga
27-07-2007, 17:35
HI,

ich habe mal ne (blöde) Frage :



#include <iostream>
using namespace std;

class T{
public:
~T()
{
_i++;
std::cout<<"destructor der der instanz : "<<_i<<endl;
}
private:
static int _i;
};

int T::_i = 0;

int main(void)
{
T a;
{
T b;
}
while(true);
return 0;
}


Wenn ich dieses Programm starte, wird der Destruktor von b ganz normal aufgerufen der von a aber nicht, sogar, wenn ich das Programm kille. Wieso ?

inge
27-07-2007, 17:50
eine instanz existiert nur innerhalb der klammern {} in denen diese erstellt wurde.
istanz a wurde direkt in der main-methode erstellt, d.h. das programm wird beendet, bevor der destruktor aufgerufen wird...


int main(void)
{
T a;
{
T b;
}//hier wird der destruktor von b aufgerufen
while(true);
return 0; //hier ist das programm zu ende
}//hier würde der destruktor von a aufgerufen werden...

BLUESCREEN3D
27-07-2007, 22:38
Er würde aufgrufen werden, wenn du da nicht eine Endlosschleife drin hättest:

while (true);

Und dass er nicht aufgerufen wird, wenn du das Programm killst, ist jawohl klar, weil dadurch das Programm halt abgebrochen wird.

edit: Noch was: Selbst wenn du außerhalb der main-Funktion eine globale Instanz der Klasse hättest, würde deren Destruktor am Programmende aufgerufen werden.