Frage zu vector
-
Wenn ich folgenden Code habe:
int main() { { myClass InstOfmyClass(123, 536); myVector.push_back(InstOfmyClass); } //Hier ist myClass "weg" return 0; }ist dann Garantiert, dass InstOfmyClass im vector weiterlebt?
Was genau passiert beim push_back?
-
Die Instanz wird in den vector kopiert, also ja, sie lebt weiter

-
Nein...
InstOfmyClass wird nach verlassen des Scopes {} zerstört.
Im Vektor wird jedoch eine Kopie davon erzeugt und diese existiert, solange
der Vektor existiert bzw. das Element entfernt wird.Gruß,
XSpille
-
Da hast du recht. Frage mich gerade selbst, wieso ich so einen Müll geschrieben habe

-
Und wenn ich keinen copy-constructor habe, dann können empfindliche Sachen wie z.B. pointer kaputt gehen sehe ich das richtig?
-
Nein, dann gibt es einen Compilerfehler.
-
314159265358979 schrieb:
Nein, dann gibt es einen Compilerfehler.
Nein. Wie kommst du darauf?!
Wenn man keinen Kopierkonstruktor definiert, dann wird einer erzeugt und der kopiert einfach alle Elemente Byte Weise. Also auch Zeiger, welche dann durchaus ungültig werden können, wenn das Urspungsobjekt diesen zerstört.
-
drakon schrieb:
314159265358979 schrieb:
Nein, dann gibt es einen Compilerfehler.
Nein. Wie kommst du darauf?!
Wenn man keinen Kopierkonstruktor definiert, dann wird einer erzeugt und der kopiert einfach alle Elemente Byte Weise. Alhttp://www.c-plusplus.net/forum/so auch Zeiger, welche dann durchaus ungültig werden können, wenn das Urspungsobjekt diesen zerstört.
Was für ein Schwachsinn. Wenn eine Klasse keinen Copy Ctor hat, können Objekte nicht kopiert werden. Warum sollte da was Byteweise kopiert werden. o_O
-
314159265358979 schrieb:
Was für ein Schwachsinn. Wenn eine Klasse keinen Copy Ctor hat, können Objekte nicht kopiert werden. Warum sollte da was Byteweise kopiert werden. o_O
Bevor man Leute mit über 6000 Beiträgen Schwachsinn schimpft, sollte man sich seiner Sache ganz sicher sein, wenn man sich nicht lächerlich machen will. Fühlst du dich bei der Aussage ganz sicher?
-
-
http://www.fybertech.com/4thread/v_66694575/1278991902568.jpg
drakon hat definitiv recht.
"Normally the compiler automatically creates a copy constructor for each class (known as a default copy constructor)" (http://en.wikipedia.org/wiki/Copy_constructor)
-
Und ein Compiler-generierter ist natürlich keiner. Alles klar.
-
314159265358979 schrieb:
Du bist lustig. Die Klasse hat einen Kopieroperator.
-
äh zu deinem beispiel, das du geschrieben hast als ich am posten war: was hat das - nämlich ein privater user-defined copy-ctor - auch nur im entferntesten mit einem default ctor zu tun?
-
SeppJ schrieb:
314159265358979 schrieb:
Du bist lustig. Die Klasse hat einen Kopieroperator.
Nein, hat sie nicht.
-
und wie nennst du dann
noncopyable& operator = (const noncopyable&);wenn man fragen darf?
-
Deklaration.
-
dass ich oben "definition" verwendet habe ist zwar ein fehler - zugegeben - ändert aber nichts an der tatsache: es ist die deklaration eines kopieroperators.
-
Das ist richtig. Aber eine Deklaration impliziert nicht das Vorhandensein, auch Definition genannt.
-
Och man, immer diese Egotrips hier. Leute, es nimmt euch keiner irgendetwas übel, wenn ihr mal eine Falschaussage macht.
Aber sich dann hier mit irgendwelchen Argumenten herausreden zu wollen, nur um nicht zuzugeben, dass man sich geirrt hat, ist echt arm.
Aber eine Deklaration impliziert nicht das Vorhandensein, auch Definition genannt.
Doch, genau das impliziert sie dem Compiler. Warum sonst solltest du sie deklarieren? Also, wenn du keinen Copy-Ctor deklarierst/definierst, wird vom Compiler einer generiert, der byteweise kopiert.
-
Ego schrieb:
Aber sich dann hier mit irgendwelchen Argumenten herausreden zu wollen, nur um nicht zuzugeben, dass man sich geirrt hat, ist echt arm.
Ich rede mich nicht heraus, ich weiß ganz genau dass ich Recht habe. Seit Anbegin der Diskussion schon.
Ego schrieb:
Doch, genau das impliziert sie dem Compiler. Warum sonst solltest du sie deklarieren? Also, wenn du keinen Copy-Ctor deklarierst/definierst, wird vom Compiler einer generiert, der byteweise kopiert.
Für den Compiler, richtig. Wenn ich einen deklariere, der nicht vorhanden ist, dann gibt das einen Fehler, so einfach ist das. Ich könnte sie deklarieren, um Kopieren zu verbieten, so als Beispiel.