Frage zu vector
-
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.
-
Hallo "PI",
deine Klasse müßte dann aber eher 'noncreatable' heißen, denn der Compilerfehler kommt schon beim Anlegen der Variablen n (hat also mit dem vector.push_back gar nichts zu tun)...
Und wenn geht es um den Kopierkonstruktor d.h. T(const T&), nicht um den Zuweisungsoperator!P.S. vllt. solltest du es noch mal wiederholen
314159265358979 schrieb:
Frage mich gerade selbst, wieso ich so einen Müll geschrieben habe
-
Th69 schrieb:
Hallo "PI",
deine Klasse müßte dann aber eher 'noncreatable' heißen, denn der Compilerfehler kommt schon beim Anlegen der Variablen n (hat also mit dem vector.push_back gar nichts zu tun)...
Und wenn geht es um den Kopierkonstruktor d.h. T(const T&), nicht um den Zuweisungsoperator!Da hast du Recht, mein Fehler.
-
...ja und? in dem fall ist dein operator privat, d.h. das interessiert erst einmal wenig, dein programm ist so und so nicht lauffähig...inwiefern hilft das weiter bei der widerlegung von drakons aussage?
wenn du dem compiler sagst: ich habe einen eigenen operator= (und das tust du mit der deklaration - egal ob du ihn im endeffekt "anlügst" oder nicht) dann wird er es mal schön bleiben lassen einen eigenen anzulegen und stattdessen deinen verwenden.
-
hihi schrieb:
wenn du dem compiler sagst: ich habe einen eigenen operator= (und das tust du mit der deklaration - egal ob du ihn im endeffekt "anlügst" oder nicht) dann wird er es mal schön bleiben lassen einen eigenen anzulegen und stattdessen deinen verwenden.
Na bitte, geht doch. Nichts anderes habe ich die ganze Zeit gesagt. Und wenn ich ihn "anlüge" ist keiner vorhanden, fertich.
-
argh! ich hab grad eben drakons aussage nochmal genauer unter die lupe genommen, weil ich der ansicht war dass hier irgendjemand ganz groß an irgendjemandem anders vorbeigeredet hat...drakon sprach von "definition". und daran hast du dich aufgehangen...nungut. insofern hast du natürlich recht. sorry für den flamewar.