如何避免共享指针的复制赋值运算符c ++

How to avoid copy assignment operator c++ for a shared pointer

考虑下面的行来创建对象 foo of class creature:

foo = creature(choice);

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

creature foo(choice);

如何对下面的行进行同样的操作?同样,生物的析构函数将被调用,我想避免这种情况。

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

对象创建部分应该是:

std::make_shared<creature>(choice);

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

您还可以通过使用 auto:

来避免打字错误 (DRY principle) 的可能性
auto creature_sp = std::make_shared<creature>(choice);