Bir hareket kurucusunun bir kopya kurucusu olarak adlandırıldığı zaman kafam karıştı. okudum aşağıdaki kaynaklar:Move Constructor ne zaman çağırılır?
Move constructor is not getting called in C++0x
Move semantics and rvalue references in C++11
bu kaynaklardan tümü ya overcomplicated (Sadece basit bir örnek istiyorum) ya da yalnızca yazma göstermek yapıcıyı hareket ettir, ama nasıl çağırılacağını değil. Ive basit bir sorun daha spesifik olarak yazılmıştır:
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;
}
anda, A, B ve C farklı işaretçi değerlerine sahiptir. A'nın yeni bir işaretçiye sahip olmasını isterim, B'nin C eski işaretçisine sahip olması ve C'nin boş bir işaretçisine sahip olmasını istiyorum.
biraz konu dışı, ama bir ben minnettar olacaktır ayrıntılı olarak bu yeni özellikleri hakkında bilgi verebilir ve muhtemelen çok daha fazla soru sormak gerek olmazdı bir dokümantasyon önermek olsaydı. Her şeyden
, kopyalamayı kontrol etmek istiyorum ve tahsis edilmesi için deyim http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom takas olabilir Şebeke. – undu
[related FAQ] (http: // stackoverflow.com/questions/3106110 /) – fredoverflow