c++ - 如何避免共享指针的复制赋值运算符c ++
问题描述
考虑下面的行来创建一个foo
类对象creature
:
foo = creature(choice);
creature
这会在将其分配给 之前创建一个临时对象foo
。这也意味着将调用析构函数。如果我不希望这种情况发生,并且我不想实现复制赋值运算符,那么我将使用以下命令创建它:
creature foo(choice);
我该如何为下面的行做同样的事情?同样,生物的析构函数将被调用,我想避免这种情况。
std::shared_ptr<creature> creature_sp = std::make_shared<creature>(creature(choice));
解决方案
对象创建部分应该是:
std::make_shared<creature>(choice);
使用make_shared
完美转发将参数转发给模板类型的构造函数——这就是存在的全部原因make_shared
。
您还可以使用以下方法避免出现拼写错误(DRY 原则)auto
:
auto creature_sp = std::make_shared<creature>(choice);
推荐阅读
- flutter - 修剪和删除飞镖中字符串开头和结尾的特定字符
- javascript - 在 Google Apps 脚本中执行节点 JS 代码
- javascript - 代码仅在编辑模式下工作,而不是在实时视图中
- reactjs - 使用 spfx 的 Sharepoint 列表中的项目计数
- nuget - 是否有用于 UNO 的 UWP nuget 的 Telerik UI?
- c - 数组中的额外大小(尤其是所需大小的 +1)以及我们为什么需要它?
- c# - 在数据表上使用从设计器添加的 datagridview 列
- html - 在背景矩形的中心创建一列框
- python - 如何切换布尔字段
- python - 如何将数据框行合并为单行,每列的所有行值都集中在一起?