2011-07-24 10 views
8

संभव डुप्लिकेट:
Can I list-initialize a vector of move-only type?प्रारंभकर्ता सूची के साथ noncopyable के एक कंटेनर कैसे शुरू करें?

मैं जीसीसी 4.6.1 का उपयोग इस कोड

int main() 
{ 
    std::vector<std::unique_ptr<int>> vec({ 
      std::unique_ptr<int>(new int(0)), 
      std::unique_ptr<int>(new int(1)), 
     }); 
    return 0; 
} 

क्या जी ++ शिकायत में संकलित करने के लिए वहाँ

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../include/c++/4.6.1/bits/stl_construct.h:76:7: **error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&)** [with _Tp = int, _Dp = std::default_delete<int>, std::unique_ptr<_Tp, _Dp> = std::unique_ptr<int>]' 
की तरह कुछ है

ऐसा लगता है कि जी ++ अभी भी इस मामले में प्रतिलिपि बनाने की कोशिश करता है, हालांकि मैंने जो प्रारंभकर्ता सूची में रखा है वह आर-वैल्यू हैं। तो मैं प्रारंभकर्ता सूची के साथ noncopyable के एक कंटेनर कैसे शुरू कर सकता है?

+0

दिलचस्प। मैंने जो परीक्षण किया है, उससे ऐसा कोई प्रतीत नहीं होता है ... – Klaim

उत्तर

5

आप प्रारंभकर्ता सूचियों से ऑब्जेक्ट्स को स्थानांतरित नहीं कर सकते हैं, क्योंकि वे केवल अपने सदस्यों तक पहुंच को अनुमति देते हैं। इस प्रकार, आप प्रारंभकर्ता सूचियों का उपयोग नहीं कर सकते हैं और रचनाकारों को स्थानांतरित कर सकते हैं; उन्हें केवल कॉपी किया जा सकता है।

+2

अगली सबसे अच्छी बात के रूप में, आप 'रिजर्व (2) 'का उपयोग कर सकते हैं, इसके बाद' इमस्थल 'पर दो कॉल कर सकते हैं, जो कि किसी भी चालक रचनाकारों का भी आह्वान नहीं करेगा। –

+0

हम्म, यह सी ++ 0x की एक बग होना चाहिए। इस स्थिति में प्रारंभकर्ता सूची के सदस्यों के पास आर-मूल्य पहुंच होनी चाहिए। – neuront