से डेटा को स्थानांतरित करने की अनुमति देने का सबसे अच्छा तरीका क्या है कल्पना कीजिए कि मेरे पास एक वर्ग है जिसका मुख्य उत्तरदायित्व डेटा कंटेनर को पॉप्युलेट करना है। मैं इस वर्ग से डेटा को स्थानांतरित करना चाहता हूं। तो मेरे पास है:सी ++ कक्षा सदस्य (std :: move वाक्यविन्यास)
class cCreator
{
public:
void generate()
{
///generate the content of data_ and populate it
....
....
}
//variation 1
std::vector<int>&& getData1()
{
return std::move(data_);
}
//variation 2
std::vector<int> getData2()
{
return std::move(data_);
}
private:
std::vector<int> data_
};
एस getData() के विविधता 1 और विविधता 2 के बीच क्या अंतर है। फ़ंक्शन परिभाषा से & & को छोड़ने पर क्या परिवर्तन होता है ??
पक्ष पर एक छोटी सी टिप्पणी: ध्यान दें कि 'getData()' के कॉल को सदस्य को नष्ट कर दिया गया है, इसलिए आप फ़ंक्शन में रावल्यू रेफ-क्वालीफायर जोड़ना चाहेंगे: 'std :: vector cCreator :: extractData() && '। इस तरह, आप कॉलर को डेटा निकालने के लिए एक रावल्यू संदर्भ प्रदान करने के लिए मजबूर करते हैं, जिससे यह स्पष्ट हो जाता है कि सदस्य को ऑब्जेक्ट से हटाया जा रहा है। यही है, 'obj.extractData() 'अब संकलित नहीं होगा, लेकिन' std :: move (obj) .extractData() 'will। –
ComicSansMS