c++ - Ensure move in std vector with trivial type -


मेरे पास ints का एक वेक्टर है

std :: vector & lt; int16_t & gt; नमूनों;

क्या इस सदिश में प्रतिलिपि को निष्क्रिय करने का एक अच्छा तरीका है जिससे कि केवल चलने की अनुमति है? मुझे std :: move के बारे में पता है, लेकिन अगर मैं कॉपी करने का प्रयास करता है, तो मुझे कंपाइल त्रुटि की तरह कुछ करना चाहिए (जैसे कि अनूठा_पीटीआर), "सही काम करने के लिए" प्रोग्रामर पर भरोसा करने की बजाय, )

एक अपरिवर्तनीय आवरण बनाएं:

  #include & lt; vector & gt ; टेम्पलेट & lt; typename T & gt; वर्ग गैर-कॉमेरेबल (सार्वजनिक): बिना गोलाबिल अपरिवर्तनीय (अपरिवर्तनीय & amp;) = डिफ़ॉल्ट; बिना गोलाबारी (टी एंड amp; डेटा): डेटा_ (स्टडी :: चाल (डेटा)) {} सार्वजनिक: बिना गोलाबिल और amp; ऑपरेटर = (अपरिवर्तनीय & amp;) = हटाना; uncopyable & amp; ऑपरेटर = (अपरिवर्तनीय & amp;) = डिफ़ॉल्ट; uncopyable & amp; ऑपरेटर = (टी एंड amp; डेटा) {data_ = std :: चाल (डेटा); वापसी * ​​यह; } निजी: टी डेटा_; }; Int main () {std :: vector & lt; int & gt; बड़ा (10000); uncopyable & LT; std :: वेक्टर & LT; पूर्णांक & gt; & gt; uncopyable_big (std :: चाल (बड़ा)); std :: वेक्टर & LT; पूर्णांक & gt; other_big (10000); Uncopyable_big = std :: चाल (other_big); }  

और अपने वेक्टर के बजाय इस प्रकार का उपयोग करें यदि आप प्रतियां की गारंटी नहीं देना चाहते हैं।


Comments