Ciao a tutti,
sto cercando di capire le rvalue references e i move constructor e pensavo di averli compresi, ma andando a scrivere un banale codice come questo non mi torna più niente.
Il problema è che quando istanzio c, dovrebbe venir richiamato il move constructor ma non è così. L'operatore + dovrebbe restituire un oggetto temporaneo e quindi un rvalue, ma a quanto pare non è così...codice:struct foo { foo(const unsigned ID = 0) : ID(new unsigned(ID)){ std::cout << " Constructor called.\n"; } foo(const foo& other) : ID(new unsigned(*(other.ID))) { std::cout << " Copy constructor called.\n"; } foo(foo&& other) : ID(other.ID) { other.ID = NULL; std::cout << " Move constructor called.\n"; } ~foo() { delete ID; } foo operator+(const foo& other) { return foo(*ID + *(other.ID)); } unsigned* ID; }; int main() { foo a(2); foo b(a); foo c(a + b); return 0; }