C++11 如何删除包含std:unique\u ptr结构的向量?

C++11 如何删除包含std:unique\u ptr结构的向量?,c++11,unique-ptr,C++11,Unique Ptr,除非对clear()向量行进行注释,否则下一个源代码甚至不会编译。有人能告诉我为什么以及如何修复它吗 #include <vector> class Class { public: typedef std::unique_ptr<int> Variable; public: Class() {} Class(Class&& other) { variables = std::move(other.variables); } p

除非对clear()向量行进行注释,否则下一个源代码甚至不会编译。有人能告诉我为什么以及如何修复它吗

#include <vector>

class Class
{
public:
    typedef std::unique_ptr<int> Variable;

public:
    Class() {}
    Class(Class&& other) { variables = std::move(other.variables); }

private:
    std::vector<Variable> variables;
};

void main()
{
    std::vector<Class> container;
    container.push_back(Class());
    container.clear();
}
#包括
班级
{
公众:
typedef std::唯一的_ptr变量;
公众:
类(){}
类(Class&&other){variables=std::move(other.variables);}
私人:
向量变量;
};
void main()
{
载体容器;
容器。推回(类());
容器。清除();
}
我必须指出,它已经在MSVisualStudio2010编译器中试用过(可以说它是半个c++11实现)。遗憾的是,我还没有找到任何允许使用VS2010的在线编译器

无论如何,下面是错误报告:

1>------ Operación Generar iniciada: proyecto: Binary, configuración: Debug Win32 ------
1>Compilación iniciada a las 30/05/2018 13:28:52.
1>InitializeBuildStatus:
1>  Aplicando tarea Touch a "Debug\Binary.unsuccessfulbuild".
1>ClCompile:
1>  Main.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2156): error C2248: 'std::unique_ptr<_Ty>::operator =' : no se puede obtener acceso al miembro private miembro declarado en la clase 'std::unique_ptr<_Ty>'
1>          with
1>          [
1>              _Ty=int
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\memory(2352) : vea la declaración de 'std::unique_ptr<_Ty>::operator ='
1>          with
1>          [
1>              _Ty=int
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2177) : vea la referencia a la creación de instancias de plantilla de función '_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::_Nonscalar_ptr_iterator_tag)' que se está compilando
1>          with
1>          [
1>              _OutIt=std::unique_ptr<int> *,
1>              _InIt=std::unique_ptr<int> *
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(719) : vea la referencia a la creación de instancias de plantilla de función '_OutIt std::_Copy_impl<std::unique_ptr<_Ty>*,std::unique_ptr<_Ty>*>(_InIt,_InIt,_OutIt)' que se está compilando
1>          with
1>          [
1>              _OutIt=std::unique_ptr<int> *,
1>              _Ty=int,
1>              _InIt=std::unique_ptr<int> *
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(709) : durante la compilación de la función miembro de plantilla de clase 'std::vector<_Ty> &std::vector<_Ty>::operator =(const std::vector<_Ty> &)'
1>          with
1>          [
1>              _Ty=Class::Variable
1>          ]
1>          c:\vc\protocolreader\main.cpp(13) : vea la referencia a la creación de instancias de plantilla de clase 'std::vector<_Ty>' que se está compilando
1>          with
1>          [
1>              _Ty=Class::Variable
1>          ]
1>
1>ERROR al compilar.
1>
1>Tiempo transcurrido 00:00:01.09
========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========
1>----操作通用iniciada:proyecto:Binary,configuración:Debug Win32------
1> 《伊尼西亚达汇编》2018年5月30日13:28:52。
1> 初始化BuildStatus:
1> Aplicando tarea触摸“调试\二进制.构建失败”。
1> CLC编译:
1> Main.cpp
1> c:\program files(x86)\microsoft visual studio 10.0\vc\include\xutility(2156):错误C2248:“std::unique_ptr::operator=”:不支持访问者访问所有miembro私有miembro声明“std::unique_ptr”
1> 与
1>          [
1> _Ty=int
1>          ]
1> c:\program files(x86)\microsoft visual studio 10.0\vc\include\memory(2352):vea la declaración de'std::unique_ptr::operator='
1> 与
1>          [
1> _Ty=int
1>          ]
1> c:\program files(x86)\microsoft visual studio 10.0\vc\include\xutility(2177):功能工厂实例的引用和确认标准::_Copy_impl(_InIt,_InIt,_OutIt,std:_Nonscalar_ptr_iterator_tag)'que se estácompileando
1> 与
1>          [
1> _OutIt=std::unique_ptr*,
1> _InIt=std::unique_ptr*
1>          ]
1> c:\program files(x86)\microsoft visual studio 10.0\vc\include\vector(719):功能工厂实例的引用和确认标准::_Copy_impl(_InIt,_InIt,_OutIt)'que se estácompileando
1> 与
1>          [
1> _OutIt=std::unique_ptr*,
1> _Ty=int,
1> _InIt=std::unique_ptr*
1>          ]
1> c:\ProgramFiles(x86)\microsoft visual studio 10.0\vc\include\vector(709):durante la compileación de la función miembro de plantilla de clase'std::vector&std::vector::operator=(const std::vector&)'
1> 与
1>          [
1> _Ty=Class::Variable
1>          ]
1> c:\vc\protocolreader\main.cpp(13):参考文献和植物实例“std::vector”是一本汇编
1> 与
1>          [
1> _Ty=Class::Variable
1>          ]
1>
1> 编译程序出错。
1>
1> 蒂恩波跨库里多00:00:01.09
=========常规:0个更正,1个不更正,0个实施,0个省略==========

如果需要,您可以使用在线服务将其从西班牙语翻译成英语。

您需要执行
类的移动分配:

Class& operator=(Class&& other)
{
    variables = std::move(other.variables);
    return *this;
}

代码不会编译,因为
的复制赋值运算符不可用,因为它包含不可复制的成员。现代编译器将使用默认生成的移动赋值运算符,但是Visual Studio 2010不这样做。

“甚至不编译”->请添加编译器错误消息错误是什么?这是在编译时没有注释清楚的行。我忍不住注意,在您的示例中,析构函数丢失了。调用clear时,将调用对象的析构函数。也许是相关的?@Clonk析构函数被隐式定义了非常感谢你的回答。我已经这样做了,但最后你做得更容易了。我猜这是支付的价格,如果你被给予石器时代的项目要求的工具。