如何初始化std :: unique_ptr <std :: unique_ptr <T> []>?

时间:2019-12-27 13:42:10

标签: c++ data-structures c++14 smart-pointers unique-ptr

我的班级有这个成员:

static std::unique_ptr<std::unique_ptr<ICommand>[]> changestatecommands;

,我找不到正确的方法来初始化它。我希望数组被初始化,但元素未初始化,因此我可以随时编写如下内容:

changestatecommands[i] = std::make_unique<ICommand>();

不要在声明时立即初始化数组,还是在运行时稍后初始化数组。理想情况下,我想知道两者都做。

1 个答案:

答案 0 :(得分:5)

  

如何初始化std::unique_ptr<std::unique_ptr<ICommand>[]>

#include <memory>

std::unique_ptr<std::unique_ptr<ICommand>[]> changestatecommands{
    new std::unique_ptr<ICommand>[10]{nullptr}
};

// or using a type alias
using UPtrICommand = std::unique_ptr<ICommand>;
std::unique_ptr<UPtrICommand[]> changestatecommands{ new UPtrICommand[10]{nullptr} };

//or like @t.niese mentioned
using UPtrICommand = std::unique_ptr<ICommand>;
auto changestatecommands{ std::make_unique<UPtrICommand[]>(10) };

但是,正如其他人提到的那样,请考虑其他选择,例如

std::vector<std::unique_ptr<ICommand>>  // credits  @t.niese

得出上述结论之前。