2014-04-01 109 views
0

當我宣佈的unique_ptr的一個載體,我得到這樣的錯誤:的std ::向量<性病::的unique_ptr <int>>不編譯

d:\qt\mingw64\include\c++\4.8.0\bits\stl_construct.h:75: 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>]' 

,它看起來像創建的容器的經典錯誤沒有拷貝構造函數的對象。

但是,在所有我能找到的標準unique_ptrs容器工作歸功於C++ 11移動語義。

我正在用MinGW-gcc 64位編譯,使用-std = gnu ++ 11。

僅支持C++ 11而不支持gnu ++ 11嗎?

謝謝

+1

爲什麼不嘗試使用C++ 11? – juanchopanza

+0

'4.8.0'它不符合C + 11,任何從'4.8.1'開始的發佈都是 – user2485710

+1

請看以下鏈接:http://stackoverflow.com/q/10613126/2724703 –

回答

1

問題不是std::vector<std::unique_ptr<int> >本身,而是這種類型的成員變量在可複製類中聲明。由於該類的默認拷貝構造函數調用了std :: vector的拷貝構造函數,std :: vector又調用std :: unique_ptr的默認構造函數,後者被刪除,編譯失敗。

std::vector<std::unique_ptr<int> >作爲函數中的局部變量編譯得很好。

2

以下將用C++ 11進行編譯。

#include <iostream> 
#include <vector> 
#include <memory> 
using namespace std; 

int main() 
{ 
    std::vector<std::unique_ptr<int> > asdf; 
    return 0; 
} 
相關問題