std :: vector <std :: unique_ptr <int>&gt;不编译</std :: unique_ptr <int>

时间:2014-04-01 14:03:25

标签: c++ c++11 vector unique-ptr

当我声明unique_ptr的向量时,我遇到了这种错误:

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>]'

这看起来像创建没有复制构造函数的对象容器的经典错误。

然而,由于c ++ 11移动语义,我可以找到的所有内容都记录了unique_ptrs的标准容器。

我使用-std = gnu ++ 11编译MinGW-gcc 64位。

仅支持c ++ 11而不支持gnu ++ 11吗?

由于

2 个答案:

答案 0 :(得分:2)

以下将使用C ++ 11进行编译。

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

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

答案 1 :(得分:2)

问题不是std::vector<std::unique_ptr<int> >本身,而是在可复制类中声明的此类型的成员变量。由于该类的默认复制构造函数调用std :: vector的复制构造函数,后者依次调用std :: unique_ptr的默认构造函数,后者被删除,编译失败。

std::vector<std::unique_ptr<int> >编译为函数中的局部变量。