2017-06-15 7 views
5

मैं एक टेम्प्लेटेड कंटेनर वर्ग है:कंटेनर में स्पष्ट चालक कन्स्ट्रक्टर की आवश्यकता है?

template<class Stuff> 
class Bag{ 
    private: 
     std::vector<Stuff> mData; 
}; 

मैं

void InPlace(Bag<Array>& Left){ 
     Bag<Array> temp; 
     Transform(Left, temp); //fills temp with desirable output 
     Left = std::move(temp); 
    } 

मान लीजिए सरणी क्या करना चाहते हैं उपयोगकर्ता परिभाषित कदम अर्थ विज्ञान है, लेकिन बैग नहीं करता है। क्या इस मामले में एमडीटा ले जाया जाएगा या कॉपी किया जाएगा?

+0

अच्छी पकड़, तय – AGML

उत्तर

8

इसे स्थानांतरित नहीं किया जाएगा, कॉपी नहीं किया जाएगा।

मैं निम्न छवि पर रखने का सुझाव देते हैं:


enter image description here


यह स्पष्ट रूप से पता चलता है कि संकलक परोक्ष रूप में लंबे समय उपयोगकर्ता उसकी/परिभाषित नहीं करता है के रूप में एक कदम निर्माता उत्पन्न करता है उसका अपना:

  • विनाशक
  • निर्माता कॉपी
  • प्रतिलिपि काम
  • चाल काम

के बाद से अपनी कक्षा इन उपयोगकर्ता परिभाषित कंस्ट्रक्टर्स संकलक उत्पन्न कदम निर्माता बुलाया जाएगा में से कोई भी नहीं है, कि निर्माता mData आ जाएगा।

+0

यह अच्छी तालिका कहां से है? – zett42

+1

@ zett42 मैं भूल गया, मैं बस इसे चारों ओर बिछा रहा है। हालांकि, मैंने एक त्वरित खोज की और यह एक प्रस्तुति से है: https://stackoverflow.com/a/24512883/1870760 –

+3

वास्तविक प्रस्तुति: https://accu.org/content/conf2014/Howard_Hinnant_Accu_2014.pdf –

संबंधित मुद्दे

 संबंधित मुद्दे