संपादित करें: अंतिम लक्ष्य: मैं एक कंटेनर क्लास बनाना चाहता हूं जो कभी भी उपलब्ध होने पर भी चाल का उपयोग न करे। NonMove उस कंटेनर के लिए परीक्षण वस्तुओं का एक वर्ग है।मैं एक गैर-चलने योग्य (लेकिन कॉपी करने योग्य) ऑब्जेक्ट कैसे वापस कर सकता हूं?
मैंने विभिन्न बदलावों की कोशिश की, लेकिन जीसीसी ने कदम का उपयोग करने के लिए जोर दिया।
class NonMove {
public:
NonMove() {}
// Copy.
NonMove(const NonMove&) {}
NonMove& operator=(const NonMove&) {}
// Move
NonMove(NonMove&&) = delete;
NonMove& operator=(NonMove&&) = delete;
};
NonMove foo() {
return NonMove();
}
-std = GNU ++ 11
move.cc: In function ‘NonMove foo()’:
move.cc:15:18: error: use of deleted function ‘NonMove::NonMove(NonMove&&)’
return NonMove();
^
move.cc:10:3: note: declared here
NonMove(NonMove&&) = delete;
^
स्पष्ट रूप से नष्ट कर दिया चाल कंस्ट्रक्टर्स अधिभार संकल्प में भाग लेते हैं। यदि आप इसे कॉपी करना चाहते हैं और स्थानांतरित नहीं करना चाहते हैं, तो प्रतिलिपि ctor घोषित करें, चाल ctor घोषित न करें, और कोई चाल ctor उत्पन्न नहीं किया जाएगा। 'ऑपरेटर =' के लिए डितो। –
'NonMove (NonMove &&) = हटाएं हटाएं; ', कक्षा वैसे भी गैर-चलने योग्य-प्रतिलिपि होगी। – juanchopanza
क्या आपके पास चालन संचालन को हटाने का एक अच्छा कारण है? एक प्रतिलिपि कन्स्ट्रक्टर या असाइनमेंट ऑपरेटर घोषित करने से उन्हें किसी भी अवांछित अधिभार को पेश किए बिना उत्पन्न होने से रोका जा सकता है। (दूसरे शब्दों में, कक्षा चल हो जाएगा, आंदोलन नकल के रूप में ही है। आपका वर्ग पूरी तरह से unmovable इसे स्थानांतरित करने के जरूरत पड़ने पर विफलता है, इसलिए।) –