Kiedy wywoływany jest Move Constructor?

Jestem zdezorientowany kiedy wywoływany jest konstruktor ruchu vs konstruktor kopii. Przeczytałem następujące źródła:

Konstruktor Move nie jest wywoływany w C ++ 0x

Przenieś semantykę i referencje rvalue w C ++ 11

msdn

Wszystkie te źródła są albo zbyt skomplikowane (chcę tylko prosty przykład), albo pokazuję tylko, jak napisać konstruktor ruchu, ale nie jak to nazwać. Napisałem prosty problem, aby być bardziej szczegółowym:

const class noConstruct{}NoConstruct;
class a
{
private:
    int *Array;
public:
    a();
    a(noConstruct);
    a(const a&);
    a& operator=(const a&);
    a(a&&);
    a& operator=(a&&);
    ~a();
};

a::a()
{
    Array=new int[5]{1,2,3,4,5};
}
a::a(noConstruct Parameter)
{
    Array=nullptr;
}
a::a(const a& Old): Array(Old.Array)
{

}
a& a::operator=(const a&Old)
{
    delete[] Array;
    Array=new int[5];
    for (int i=0;i!=5;i++)
    {
        Array[i]=Old.Array[i];
    }
    return *this;
}
a::a(a&&Old)
{
    Array=Old.Array;
    Old.Array=nullptr;
}
a& a::operator=(a&&Old)
{
    Array=Old.Array;
    Old.Array=nullptr;
    return *this;
}
a::~a()
{
    delete[] Array;
}

int main()
{
    a A(NoConstruct),B(NoConstruct),C;
    A=C;
    B=C;
}

obecnie A, B i C mają różne wartości wskaźnika. Chciałbym, aby A miał nowy wskaźnik, B, aby mieć stary wskaźnik C, a C, aby miał wskaźnik zerowy.

nieco poza tematem, ale jeśli ktoś mógłby zasugerować dokumentację, w której mógłbym szczegółowo poznać te nowe funkcje, byłbym wdzięczny i prawdopodobnie nie musiałbym zadawać więcej pytań.

questionAnswers(2)

yourAnswerToTheQuestion