Frage zu vector
-
-
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.
-
Es kommt auf die Interpretation der ursprünglichen Aussage an:
Und wenn ich keinen copy-constructor habe, dann können empfindliche Sachen wie z.B. pointer kaputt gehen sehe ich das richtig?
Was also hier mit "habe" gemeint war. Für mich war das "habe" halt Definition. Dass der TO einen private Kopierkonstruktor gemeint hat halte ich für sehr weit hergeholt.
-
Eine Definition ist auch eine Deklaration, und sobald ich ihn deklariere wird keiner erstellt

Natürlich wird der Threadersteller das nicht gemeint haben, das ist schon klar.
Und da mir das falsche Beispiel peinlich ist, hier nochmal richtig: http://codepad.org/h6tShiO8
-
314159265358979 schrieb:
Eine Definition ist auch eine Deklaration, und sobald ich ihn deklariere wird keiner erstellt

Darum habe ich von der Definition gesprochen..
Natürlich wird der Threadersteller das nicht gemeint haben, das ist schon klar.
Warum bist du dann darauf eingegangen? Oder warum hast du das nicht gleich unmissverständlich formuliert was du verstanden hast?
Ich antworte bei Fragen üblicherweise auf das, was der Fragende wohl am ehesten meint, auch wenn er sich manchmal nicht korrekt ausdrückt. Aber dann mit irgendwelchen Spezialfällen zu kommen finde ich zu penibel. Im Zweifelsfall frage ich nach, was er gemeint hat, aber wenn es so offensichtlich ist, dass eine Definition ("haben") gemeint war hacke ich nicht darauf rum, dass er sich falsch/missverständlich ausgedrückt hat. So etwas nervt einfach und bringt am Ende niemandem etwas.