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::