कोड का निम्न भाग पर विचार करें:ऑब्जेक्ट से स्थानांतरित किए जाने वाले विनाशक का आह्वान क्यों किया जाता है?
struct foo {
std::string id;
};
int main() {
std::vector<foo> v;
{
foo tmp;
v.push_back(std::move(tmp));
}
}
कोड का टुकड़ा में प्रदर्शन किया:
- वर्ग
foo
जा रहा है के डिफ़ॉल्ट निर्माता वस्तु के निर्माण के लिए लागू किया जा करने के लिएtmp
। - कक्षा
foo
के चालक कन्स्ट्रक्टरv.push_back(std::move(tmp));
कथन में शामिल किए जा रहे हैं। class foo
के विनाशक को दो बार बुलाया जा रहा है।
सवाल:
- एक की नाशक वस्तु से चले गए दो बार कहा जाता है क्यों?
- वास्तव में स्थानांतरित होने वाली वस्तु से क्या स्थानांतरित किया जाता है?
स्थानांतरित वस्तु से केवल एक बार नष्ट हो जाता है। प्रत्येक वस्तु एक बार बनाई जाती है और एक बार नष्ट हो जाती है। दो विनाशक कॉल 'tmp', और वेक्टर में ऑब्जेक्ट के लिए हैं। –