我想到了以下类型的代码:
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报告错误 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以稍后重置它们)
std::array
将被默认初始化,所以您不需要这样做。 - songyuanyaounique_ptr u
会被初始化为空,就像你将nullptr
分配给它一样。你可以通过转换为bool
来测试是否填充了它,例如if(u) { /*...已填充...*/ }
。 - davidhigh