gpt4 book ai didi

c++ - 使用 shared_ptr 进行条件构造?

转载 作者:行者123 更新时间:2023-11-27 23:24:40 25 4
gpt4 key购买 nike

我有:

Command *command;

if(commandType == "Start")
{
command = new StartCommand();
}
else if (commandType == "Stop")
{
command = new StopCommand();
}

现在假设我想让 command 成为一个 shared_ptr,我该如何翻译上面的代码来使用 shared_ptr?

最佳答案

跳过明显的,如果你想正确地初始化你的变量,例如如果是 const ,你可以这样做

std::shared_ptr<Command> factoryCommand(std::string const& commandType) {
if(commandType == "Start")
return std::make_shared<StartCommand>();
if(commandType == "Stop")
return std::make_shared<StopCommand>();
return std::shared_ptr<Command>(nullptr);
}

std::shared_ptr<Command> const command {factoryCommand(commandType)};

正如评论中所指出的,您也可以违反 C++ 的 RAII 指南以及单独的定义和初始化。我还是更愿意使用 std::shared_ptr<Command>::operator=std::shared_ptr<Command>::reset不过,因为它更直观,不会诱骗您进入 new正在做你永远不会做的事情delete .

因此,对于 "Start"分支,例如,这看起来像这样:

std::shared_ptr<Command> command;
//...
// I would flag this in the review process as "you're doing it wrong"
command.reset(new StartCommand());
// This is what you should do if you *have* to separate definition and initialisation:
command = std::make_shared<StartCommand>();

关于c++ - 使用 shared_ptr 进行条件构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237020/

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