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.

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;
}
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ì...