मैं उलझन में हूं जब एक चालक कन्स्ट्रक्टर को कॉपी कॉपी कन्स्ट्रक्टर कहा जाता है। मैं पढ़ा है निम्न स्रोतों:कन्स्ट्रक्टर को कब ले जाता है?
Move constructor is not getting called in C++0x
Move semantics and rvalue references in C++11
इन स्रोतों में से सभी कर रहे हैं या तो overcomplicated (मैं सिर्फ एक सरल उदाहरण चाहते हैं) या केवल कैसे एक लिखने के लिए दिखाने कन्स्ट्रक्टर को ले जाएं, लेकिन इसे कॉल करने के लिए नहीं। Ive लिखा एक साधारण सी समस्या अधिक विशिष्ट:
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;
}
वर्तमान में ए, बी, और सी सभी विभिन्न सूचक मान हैं। मैं चाहता हूं कि ए को एक नया पॉइंटर होना चाहिए, बी को सी के पुराने सूचक होने के लिए, और सी को एक नल पॉइंटर होना चाहिए।
कुछ हद तक विषय बंद है, लेकिन अगर कोई दस्तावेज सुझा सकता है जहां मैं इन नई सुविधाओं के बारे में विस्तार से सीख सकता हूं तो मैं आभारी रहूंगा और शायद कई और प्रश्न पूछने की आवश्यकता नहीं होगी।
एक आंशिक रूप से संबंधित मामले पर, आप प्रतिलिपि जाँच करना चाहते हैं और अपने assignement के लिए स्वैप मुहावरा http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom सकता है ऑपरेटर। – undu
[संबंधित एफएक्यू] (http: // stackoverflow।कॉम/प्रश्न/3106110 /) – fredoverflow