Wieso Copy Construkor nötig bei refeenz rückgabe?



  • Folgendes:

    class A{.....};
    
    class B{
    
    A &B::operator[] (size_t iIndes){
    
      return ....;
    }
    

    In Klasse B wird über den Operrator ein A zurückgeben, udn zwar per referennz.
    Nun mekert der Compilier das A keine Copyconstruktor hat. Aber der ist doch nich notwendig wenn ich das Objekt per Referenz zurückgebe oder, da wird ja im Speicher nichts kopiert?



  • Beim 'return' wird noch nichts kopiert. Aber in dem Moment, wo du ein B b;...;A a = b[4711]; schreibst, wird kopiert - und genau an dieser Stelle dürfte auch dein Compiler sich beschwert haben.

    (edit: Klassennamen korrigiert)



  • Ahh ok;) aber dafür ist doch ein Zuweisungsoperator nötig oder? Wobei der Zuweisungsoperator dann den kopykonstruktor enthält?



  • das ist ein gewisser unterschied

    A a = b[123];
    

    ruft den ctor auf

    A a;
    a=b[123]
    

    ruft den = op auf



  • der copy ctor um genau zu sein...

    class A
    {
    public:
       A() { cout<<"A::ctor"<<endl; }
       A(const A& src) { cout<<"A::cpy-ctor"<<endl; }
       A& operator=(const A& src)  { cout<<"A::operator="<<endl;  return *this; }
    int a;
    };
    
    ...
     A a;     //-> A::ctor
     A b = a; //-> A::cpy-ctor
     a = b;   //A::
    

Log in to reply