我有以下几种代码:
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
以便以后重置它们。
答案 0 :(得分:4)
总的来说,这在标准本身实际上是一个非常棘手的案例,如果我没记错的话,必须在C ++ 14中修复。所以它不是编译器错误,但应该在较新的编译器中修复。
在这种情况下最简单的方法是删除初始化,因为数组的默认初始化将产生你想要的值。