Kopierkonstruktor



  • Hallo,

    folgendes in wikipedia gelesen.

    Der Kopierkonstruktor übernimmt eine konstante Referenz, denn sonst müsste er ja (implizit) aufgerufen werden, bevor er aufgerufen wird!

    Also dass er eine Referenz übernimmt ist mir klar, da sonst glei Kopierarbeit
    anstünde. und const könnt ich mir damit erklären da ja nur lesend zugegriffen
    werden soll. Jedenfalls versteh ich den satz in wikipedia nicht



  • Ich nehme an, dass Wikipedia (wie Du schon richtig vermutet hast) auf den Unterschied pass-by-ref. und pass-by-value und nicht const / non-const anspielt.

    Simon



  • Ob der Copyconstructor eine const oder eine normale Referenz entgegennimmt ist deine Entscheidung beim Implementieren. Toll, oder?



  • So ne konstante Referenz ist aber schon was Praktisches, wenn du auch Folgendes machen willst:

    const MyClass foo;
    MyClass bar(foo);
    


  • blurry333 schrieb:

    Hallo,

    folgendes in wikipedia gelesen.

    Der Kopierkonstruktor übernimmt eine konstante Referenz, denn sonst müsste er ja (implizit) aufgerufen werden, bevor er aufgerufen wird!

    Also dass er eine Referenz übernimmt ist mir klar, da sonst glei Kopierarbeit
    anstünde. und const könnt ich mir damit erklären da ja nur lesend zugegriffen
    werden soll. Jedenfalls versteh ich den satz in wikipedia nicht

    Der Kopierkonstruktor wird (wie der Name schon sagt) immer aufgerufen, wenn du ein Element der Klasse kopierst. Beispiel:

    string a = "LOL";
    string b = a;  //hier wird kopiert
    

    Übergibst du keine Referenz an deinen Kopierkonstruktor, müsste das Element für den Parameter kopiert werden und somit bräuchtest du den Kopierkonstruktor, damit das Element an den Kopierkonstruktor übergeben werden kann (Ich hoffe, es ist halbwegs verständlich 😉 )



  • wxSkip schrieb:

    string b = a;  //hier wird kopiert
    

    Stand das im A-Z-Buch?



  • volkard schrieb:

    wxSkip schrieb:

    string b = a;  //hier wird kopiert
    

    Stand das im A-Z-Buch?

    Pfff... ich meine, es wird der Kopierkonstruktor aufgerufen, natürlich wird nicht 1:1 kopiert, sonst würden die char* im string auf den selben Speicherbereich zeigen.


Anmelden zum Antworten