我对于移动构造函数和复制构造函数何时被调用感到困惑。我读了以下资源:Move constructor is not getting called in C++0x,C++11中的移动语义和右值引用,MSDN文章。
这些资源要么太复杂了(我只想要一个简单的例子),要么只展示如何编写移动构造函数,而不是如何调用它。我写了一个简单的问题来更加具体:
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;
}
目前A、B和C的指针值不同。我想让A有一个新的指针,让B具有C的旧指针,让C具有一个空指针。
有点离题,但如果有人能建议我一个可以详细了解这些新功能的文档,我将不胜感激,并且可能不需要再问很多问题。