Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Konstruktor Destruktor

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.11.2011, 13:39 Uhr
~anfaengrrr
Gast


Hallo zusammen,

ich bin C++ Anfänger und setze mich grade mit Konstruktoren und Destruktoren auseinander. Leider komme ich grade nicht auf den grünen Zweig. Im unteren Beispiel erzeuge ich das Objekt a2 mit dem default Konstruktor. Anschliessend weise ich 1 zu. Nun wird ein neues Objekt erzeugt und im nächsten Schritt auch wiedder direkt gelöscht. Was passiert da genau? Wenn ich das richtig siehe wir doch das a2 Objekt erst ganz am schluss vernichtet...aber was passiert an der anderen Stelle.

Vielen Dank schon mal

class A {
public:
A(){cout<<" A()"<<endl;}
A(int i):i(i){cout<<" A(int)"<<endl;}
~A(){cout<<"~A(): "<<i<<endl;}
private:
int i;
};


int main() {
cout<<"Objekte erstellen"<<endl;
A a(1);
A a2;
cout<<"nun wird die 1 --> a2 zugewiesen"<<endl;
a2 = 10;
cout<<"wer wurde zerstört?"<<endl;
}

//Objekte erstellen
// A(int)
// A()
//nun wird die 1 --> a2 zugewiesen
// A(int)
//~A(): 10
//wer wurde zerstört?
//~A(): 10
//~A(): 1
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.11.2011, 15:32 Uhr
0xdeadbeef
Gott
(Operator)


Bei

C++:
a2 = 10;


läuft der Compiler in das Problem, dass A keinen operator= hat, der int entgegen nimmt; automatisch generiert wird lediglich ein operator=(A const &). Da A aber einen nicht-expliziten Konstruktor hat, der int entgegen nimmt, kann er diesen benutzen, wenn er die 10 vorher in ein Objekt vom Typ A umwandelt. Effektiv wird daraus also

C++:
a2 = A(10);


auf die selbe Art und Weise, wie es bei

C++:
void foo(A const &a) { ... }

// ...

foo(10);


der Fall wäre. Dieser Mechanismus existiert, weil es ziemlich anstrengend wäre, jedes mal

C++:
void foo(std::string const &s) { ... }

foo(std::string("bar")); // statt foo("bar");


etc. zu schreiben.

Dementsprechend wird da ein temporäres Objekt vom Typ A erstellt und gleich wieder zerstört, und das ist es, was du in der Ausgabe siehst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 12.11.2011 um 15:33 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.11.2011, 16:30 Uhr
~anfaengrrr
Gast


Hallo und vielen Dank, das leuchtet ein..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: