gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:55:32 25 4
gpt4 key购买 nike

我想到了以下类型的代码:

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 以便稍后重置它们)

最佳答案

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

在这种情况下最简单的做法就是放弃初始化,因为数组的默认初始化会产生您想要的值。

关于c++ - 是否可以在构造函数的初始化列表中初始化 std::unique_ptr 的 std::array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35455032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com