Construtor C ++ com referência rvalue
Considere esta classe com três construtores:
<code>class Circle { public: Circle(int r) { _radius = r; } Circle(const Circle& c){ _radius = c.radius(); cout << endl << "Copy constructor with lvalue reference. Radius: " << _radius; } Circle(Circle&& c){ _radius = c.radius(); cout << endl << "Copy constructor with rvalue reference. Radius:" << _radius; } int radius() const { return _radius; } private: int _radius; }; int main() { Circle c1(2); Circle c2(c1); cout << endl << c2.radius(); Circle c3(Circle(4)); cout << endl << c3.radius(); return 0; } </code>
Compilado com "g ++ -std = c ++ 0x". A saída é:
<code>Copy constructor with lvalue reference. Radius: 2 2 4 </code>
ESTÁ BEM. Os construtores corretos para os dois primeiros casos são chamados. Mas para o terceiro caso, ou seja, Circle c3 (Circle (4)), eu esperaria que o terceiro construtor (copy constructor with rvalue referecne) fosse chamado, mas não é o caso. Obviamente, algum construtor é chamado, já que c3 é instanciado corretamente, mas não entendo por que o compilador não está usando o explicitamente fornecido. Estou faltando alguma coisa aqui?