2017-07-24 14 views
25

मैं सोच रहा हूँ कि जब संकलन मैं एक त्रुटि मिलती है:सी ++ वापसी स्थिरांक unique_ptr

const std::unique_ptr<int> get() { 
    return std::make_unique<int>(10); 
} 

int main() { 

    const std::unique_ptr<int> value = get(); 

    return EXIT_SUCCESS; 
} 

मैं निम्नलिखित त्रुटि मिलती है:

main.cpp: In function ‘int main()’: 
main.cpp:10:44: 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>]’ 
    const std::unique_ptr<int> value = get(); 

यह सही ढंग से संकलित जब मैं get हस्ताक्षर से const को दूर ।

क्या निरंतर unique_ptr को वापस करने का कोई तरीका है?

+2

क्या वास्तविक 'std :: unique_ptr' ऑब्जेक्ट स्थिर होना चाहिए, या इसके द्वारा इंगित डेटा? –

+0

हां, मेरा मतलब है कि वास्तविक 'std :: unique_ptr' ऑब्जेक्ट स्थिर होना चाहिए। – jean553

+0

आपको डेटा के निरंतर सूचक की आवश्यकता क्यों होगी जिसे बदला जा सकता है? वह अजीब है। –

उत्तर

53

क्योंकि unique_ptr स्थिर है क्योंकि इसे केवल कॉपी नहीं किया जा सकता है। और unique_ptr की प्रतिलिपि बनाने की अनुमति नहीं है (अन्यथा यह "अद्वितीय" नहीं होगा)।

यदि पॉइंटर द्वारा इंगित डेटा स्थिर होना चाहिए, तो इसके बजाय std::unique_ptr<const int> का उपयोग करें।

+2

बस एक त्वरित नोट: ओपी के उदाहरण को गारंटीकृत प्रति एलिशन के कारण सी ++ 17 में संकलित करना है। – bogdan

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