7

爲什麼我不能從一對返回unique_ptr?爲什麼我不能從一對返回unique_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; 
} 

當我試着使用G ++ 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 –

相關問題