我的类有这个成员:
static std::unique_ptr<std::unique_ptr<ICommand>[]> changestatecommands;
我无法找到正确的初始化方式。我希望数组被初始化,但元素未被初始化,这样我可以随时像这样写入内容:
changestatecommands[i] = std::make_unique<ICommand>();
数组是在声明时立即初始化还是在运行时稍后初始化都无关紧要。我希望知道如何同时执行这两个操作。
我的类有这个成员:
static std::unique_ptr<std::unique_ptr<ICommand>[]> changestatecommands;
我无法找到正确的初始化方式。我希望数组被初始化,但元素未被初始化,这样我可以随时像这样写入内容:
changestatecommands[i] = std::make_unique<ICommand>();
数组是在声明时立即初始化还是在运行时稍后初始化都无关紧要。我希望知道如何同时执行这两个操作。
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
在得出以上结论之前。
std::make_unique<std::unique_ptr<ICommand>[]>(10)
,再结合 auto
:auto changestatecommands = std::make_unique<std::unique_ptr<ICommand>[]>(10)
。 - t.niese
std::vector<ICommand*>
(或者如果您需要所有权语义,则使用std::vector<std::unique_ptr<ICommand>>
)? - Some programmer dudestd::vector<std::unique_ptr<ICommand>>
? - t.nieseunique_ptr[]
存在明显的不利之处。 - Fantastic Mr Foxstd::unique_ptr<ICommand>[]
),而是使用std容器。 - t.niese