Cześć
Mam problem z wywołaniem konstruktora kopiującego, a raczej z wątpliwościami, czy to na pewno on powinien być wywoływany.
Pod linkiem:
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=199
W sekcji Return Value Optimization jest kawałek kodu:
string getmagicword()
(
return string("Supercalifragilisticexpialidocious");
);
string magicw=getmagicword();
..i piszą, że jest wywoływany konstruktor kopiujący dla magicw.
Mam niemal identyczny przykład "u siebie":
#include <iostream>
using namespace std;
class X{
public:
X(){
cout << "Konstruktor domyslny" << endl;
}
X(const X& x){
cout << "Konstruktor kopiujacy X::X(const X& x)" << endl;
}
X(X&& x){
cout << "Konstruktor przenoszacy X::X(X&& x)" << endl;
}
~X(){
cout << "Destruktor X::~X()" << endl;
}
};
void f(X x){}
X g()
{
X x;
return x;
}
int main(){
cout << "Zwrocenie przez wartosc: " << endl;
X x2 = g();
}
I output:
Zwrocenie przez wartosc:
Konstruktor domyslny
Destruktor X::~X()
Moje pytanie brzmi: czemu nie wywołuje się konstruktor kopiujący, jeśli w podobnym przykładzie zaznaczyli, że powinien?
Jeśli nie wywołuje się k. kopiujący, to co w takim razie tam ma miejsce?
Dzięki z góry!