是否可以在构造函数的初始化列表中初始化std :: unique_ptr的std :: array?

时间:2016-02-17 11:11:14

标签: c++ c++11

我有以下几种代码:

class Surface { /* abstract base class with various properly derived classes */ };

struct ParallelSurfaces
{
    std::array<std::unique_ptr<Surface>, 2> surfacePtrs;

    ParallelSurfaces()
    : surfacePtrs({std::unique_ptr<Surface>(), std::unique_ptr<Surface>()})
    { }
};

然而这不起作用,因为unique_ptr的拷贝构造函数被删除了。 (Visual Studio 2013报告error C2280: 'std::unique_ptr<Surface,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function

  • 是否可以在初始化列表中执行此操作?

  • 或者我是否必须在构造函数体中执行此操作?

  • 或者我真的可以将其保留为默认初始化吗? (因为我只想在施工时存储nullptr以便以后重置它们。

1 个答案:

答案 0 :(得分:4)

总的来说,这在标准本身实际上是一个非常棘手的案例,如果我没记错的话,必须在C ++ 14中修复。所以它不是编译器错误,但应该在较新的编译器中修复。

在这种情况下最简单的方法是删除初始化,因为数组的默认初始化将产生你想要的值。