7

मैं एक जोड़ी से एक अद्वितीय_ptr क्यों नहीं लौटा सकता?मैं एक जोड़ी से एक अद्वितीय_ptr क्यों नहीं लौटा सकता?

#include <iostream> 
#include <memory> 
#include <utility> 

using namespace std; 

unique_ptr<int> get_value() { 
    pair<unique_ptr<int>, int> p(unique_ptr<int>(new int(3)), 4); 
    return p.first; 
} 

int main(void) { 
    cout << *get_value() << endl; 
    return 0; 
} 

जब मैं जी ++ 4.6 के साथ इस संकलन करने का प्रयास करें, मैं:

../main.cpp: In function ‘std::unique_ptr<int> get_value()’: 
../main.cpp:9:11: 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>]’ 
/usr/include/c++/4.6/bits/unique_ptr.h:256:7: error: declared here 
make: *** [main.o] Error 1 

मैं त्रुटि संदेश

+1

'std :: unique_ptr' केवल स्थानांतरित है। – chris

+0

यह केवल कैसे नहीं चल रहा है? – dspyz

उत्तर

9

std::unique_ptr एक प्रति निर्माता नहीं है, और जिस तरह से समझ में नहीं आता जिसमें आप इसे वापस कर रहे हैं (स्थानीय ऑब्जेक्ट के सदस्य के रूप में) स्वचालित चाल के लिए योग्य नहीं है। आपको इस मामले में मैन्युअल रूप से कदम निर्दिष्ट करने की आवश्यकता है।

return std::move(p.first); 
+0

मुझे कैसे पता चलेगा कि स्वचालित चाल के लिए योग्यता क्या है? – dspyz

+1

@dspyz: मुझे संदर्भ देखने के लिए एक मिनट दें, लेकिन यह वही स्थितियां हैं जो इसे रिटर्न वैल्यू ऑप्टिमाइज़ेशन के लिए अर्हता प्राप्त करती हैं। –

+6

@dspyz: 12.8 पैराग्राफ 31 और 32 देखें: http://isocpp.org/files/papers/N3797.pdf –

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