जब इस कदम निर्माणकर्ता और चाल काम ऑपरेटरों को लागू करने, एक अक्सर इस तरह कोड लिखते हैं:एक पॉइंटर वैरिएबल को क्यों स्थानांतरित करना इसे शून्य पर सेट नहीं करता है?
p = other.p;
other.p = 0;
परोक्ष परिभाषित कदम संचालन इस तरह कोड के साथ लागू किया जाएगा:
p = std::move(other.p);
कौन सा गलत होगा, क्योंकि एक पॉइंटर वैरिएबल को पर ले जाने से इसे शून्य पर सेट किया जाता है। ऐसा क्यों है? क्या कोई मामला है कि हम कदम सूचकांक को मूल सूचक परिवर्तक को अपरिवर्तित छोड़ना चाहते हैं?
नोट: "चलती", मैं नहीं सिर्फ उपसूचक std::move(other.p)
मतलब है, मैं पूरी अभिव्यक्ति p = std::move(other.p)
मतलब है। तो, ऐसा कोई विशेष भाषा नियम क्यों नहीं है जो कहता है "यदि असाइनमेंट का दायां हाथ एक सूचक xvalue है, तो यह असाइनमेंट के बाद शून्य हो गया है।"
क्यों होना चाहिए? एकमात्र चीज जिसे आप 'स्थानांतरित' ऑब्जेक्ट के साथ करना चाहते हैं उसे अनदेखा कर दिया जाता है। कक्षा के स्वामित्व वाली स्मृति को पॉइंटर पॉइंट होने पर कोई समस्या नहीं होनी चाहिए यदि आप अब पॉइंटर का उपयोग नहीं करते हैं, है ना? – hvd
"आप जो भी उपयोग नहीं करते हैं उसके लिए आप भुगतान नहीं करते हैं"? –
@hvd: अगर यह कहता है कि 'हटाएं पी' :) – fredoverflow