Hallo!
Ich habe folgenden Code geschrieben:
[B]
class[/B] String{
[B]private[/B]:
[B]char[/B]* c;
[B]public[/B]:
String(){
c = [B]new char[/B][100];
}
~String(){
[B]delete[/B] []c;
}
};
[B]void[/B] setString(String s){
}
[B]int[/B] main([B]int[/B] argc, [B]char[/B]* argv[]){
setString(String());
[B]return[/B] 0;
}
Alles anzeigen
Bei diesem Code läuft der String-Destruktor ~String nicht ein, sondern 2 Mal (jeweils am Ende von setString und von main). Ich kann mir das nicht erklären, denn es wird doch nur eine String-Instanz erstellt. Wenn ich in die String-Klasse einen Copy-Constructor einfüge, dann wird der Destruktor wie erwartet nur 1 Mal aufgerufen (der Copy-Constructor selbst jedoch nicht, weshalb es eigentlich keine Rolle spielen dürfte wenn dieser fehlt).
Als Compiler verwende ich den VC++-Compiler. Wenn ich das gleiche Programm unter Linux mit dem gcc kompiliere wird der Destruktor nur 1 Mal ausgeführt (so wie es imho sein sollte). Ich kann mir aber nicht vorstellen dass das ein Fehler im MS-Compiler ist, weil solche Konstrukte sicher oft verwendet werden.
Kann mir das jemand erklären?
Nebenfrage: Ist es eigentlich normal dass hier:
der Copy-Constructor nicht läuft?
mfg