首页 > 解决方案 > 如何避免共享指针的复制赋值运算符c ++

问题描述

考虑下面的行来创建一个foo类对象creature

foo = creature(choice);

creature这会在将其分配给 之前创建一个临时对象foo。这也意味着将调用析构函数。如果我不希望这种情况发生,并且我不想实现复制赋值运算符,那么我将使用以下命令创建它:

creature foo(choice);

我该如何为下面的行做同样的事情?同样,生物的析构函数将被调用,我想避免这种情况。

std::shared_ptr<creature> creature_sp = std::make_shared<creature>(creature(choice));

标签: c++c++11smart-pointers

解决方案


对象创建部分应该是:

std::make_shared<creature>(choice);

使用make_shared完美转发将参数转发给模板类型的构造函数——这就是存在的全部原因make_shared

您还可以使用以下方法避免出现拼写错误(DRY 原则auto

auto creature_sp = std::make_shared<creature>(choice); 

推荐阅读