geisterobjekte?
-
folgendes progrämmchen:
#include <iostream> #include <vector> using namespace std; class X { public: X() {cout << "hello" << endl;} ~X() {cout << "goodbye" << endl;} void ping() {cout << "back from the dead!" << endl;} }; int main () { vector<X> *vec = new vector<X>; X x; vec->push_back(x); delete vec; x.ping(); }gibt das aus:
hello goodbye back from the dead! goodbyedas object wird 2 mal getötet

ist das ein bug im compiler (ein etwas älterer dev-cpp/mingw)
ein bug im vector?
ist das ein allgemeiner c++ bug?
oder bin ich als c++-user zu doof für diese sprache?
-
Hmm ne ist doch alles richtig, weil du eine Kopie von x in den Vektor schiebst. Dann zerstörst du die Kopie und das Original.
-
Beim Hineinlegen in den Vektor wird eine Kopie angelegt und die muß ja schließlich auch wieder destruiert werden.
-
Hallo
*unsinn*
bis bald
akari
-
okay, danke.
ich bin also zu doof.
das ist mir jetzt aber echt peinlich
edit; akari, du bist auch drauf reingefallen

-
net schrieb:
ist das ein bug im compiler (ein etwas älterer dev-cpp/mingw)
ein bug im vector?
ist das ein allgemeiner c++ bug?
oder bin ich als c++-user zu doof für diese sprache?Letzteres

#include <iostream> #include <vector> using namespace std; class X { public: X() {cout << "hello" << endl;} ~X() {cout << "goodbye" << endl;} void ping() {cout << "back from the dead!" << endl;} }; int main () { vector<X> *vec = new vector<X>; X x; // legt Objekt vom Typ X auf Stack an vec->push_back(x); // legt Objekt vom Typ X in Vector an und kopiert x dorthin (inhaltlich) delete vec; // löscht Objekt(e) vom Typ X in Vector x.ping(); } // löscht Objekt vom Typ X auf StackEDIT: War ich jetzt sooo lahm?

-
LOL ist heute der Tag an dem alle nur darauf warten endlich eine Antwort geben zu können?

-
bau einfach
X(const X& rhw) { cout << "copy" << endl; }in deine Klasse mit ein und staune!

-
Das kommt mir bekannt vor - den gleichen Denkfehler hatte ich auch schonmal

http://www.c-plusplus.net/forum/viewtopic-var-t-is-155336.html
-
Neku schrieb:
Das kommt mir bekannt vor - den gleichen Denkfehler hatte ich auch schonmal

http://www.c-plusplus.net/forum/viewtopic-var-t-is-155336.htmlja, sowas passiert nunmal, wenn man lange nix mit c++ gemacht hat....