Я новичок в конструкторе перемещения, я провел опрос на некоторых сайтах и попытался использовать бета-версию Visual Studio 11 Express ..
Ниже приведен мой код тестирования ...
#include <iostream>
using namespace std;
class Foo
{
public:
Foo()
: Memory(nullptr)
{
cout<<"Foo Constructor"<<endl;
}
~Foo()
{
cout<<"~Foo Destructor"<<endl;
if(Memory != nullptr)
delete []Memory;
}
Foo(Foo& rhs)
: Memory(nullptr)
{
cout<<"Copy Constructor"<<endl;
//allocate
//this->Memory = new ....
//copy
//memcpy(this->Memory, rhs.Memory...);
}
Foo& operator=(Foo& rhs)
{
cout<<"="<<endl;
}
void* Memory;
Foo(int nBytes) { Memory = new char[nBytes]; }
Foo(Foo&& rhs)
{
cout<<"Foo Move Constructor"<<endl;
Memory = rhs.Memory;
rhs.Memory = nullptr;
}
};
Foo Get()
{
Foo f;
return f;
//return Foo();
}
void Set(Foo rhs)
{
Foo obj(rhs);
}
int main()
{
Set(Get());
return 0;
}
Iне знаю, почему он не войдет в конструктор перемещения.
Это действительно R-значение из Get ();
Если я изменил конструктор неконстантного копирования из конструктора const,
это войдет в конструктор перемещения.Поведение изменилось ...
Может ли кто-нибудь любезно объяснить, почему это произошло?