当我声明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吗?
由于
答案 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> >
编译为函数中的局部变量。