मान लीजिए इस तरह एक समारोह है ले जाया गया:std :: move- प्रोग्रामर चेतावनी देने के लिए कैसे उपयोग करने के लिए नहीं * से * वस्तु
int * func()
{
std::unique_ptr<int> ptr(new int(3));
//Few more lines of code
//then one function added where programmer writes like some thing
SOME_OTHER_FUNC(std::move(ptr));
return ptr.get();
}
void SOME_OTHER_FUNC(std::unique_ptr<int> arg_ptr)
{
}
वहाँ प्रोग्रामर चेतावनी देने के लिए std::move
के साथ इस तरह गलतियों से बचने के लिए एक रास्ता है? यह केवल unique_ptr
के बारे में नहीं बल्कि अन्य वस्तुओं के लिए भी है।
क्या हम स्थानांतरित किए गए ऑब्जेक्ट से अनुपयुक्त होने पर चेतावनी उत्पन्न करने के लिए कोई तंत्र है?
सुनिश्चित नहीं है कि डुप्लिकेट है लेकिन विषयानुसार बंद करें: http://stackoverflow.com/questions/39413502/why-should-a-move-constructor-or-move-assignment-operator-clear-its-argument/39413587# 3 9 413587 – Hayt
मैं उम्मीद करता हूं कि कंपाइलर लेखकों ने किसी भी चीज के उपयोग के लिए चेतावनी का आविष्कार किया है, जैसे कि 'std :: move''। यदि यह आपको पर्याप्त दर्द देता है, तो अपने कंपाइलर के लेखक को पैच सबमिट करने पर विचार करें! –
@TobySpeight मुझे संदेह है कि ऐसी चेतावनी पेश की जाएगी। प्रकार कन्स्ट्रक्टर/असाइनमेंट ऑपरेटरों को स्थानांतरित कर सकते हैं जो मूल को आंशिक रूप से निर्दिष्ट करते हैं (आंशिक रूप से, या यहां तक कि पूरी तरह से) निर्दिष्ट राज्य और निश्चित (शायद यहां तक कि सभी) परिचालनों में अच्छी तरह परिभाषित व्यवहार होगा। संकलक कैसे पता लगा सकता है कि वस्तु से स्थानांतरित करने का उपयोग अनजान था? – user2079303