You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中std::shared_ptr场景如何避免拷贝赋值运算符与临时对象析构

你当前代码产生多余临时对象的核心原因是,主动构造了creature(choice)临时实例作为入参传给std::make_shared,这会让std::make_shared内部调用拷贝/移动构造函数生成堆上的creature对象,临时对象使用完成后就会被销毁,触发不必要的析构调用,和你最开始遇到的赋值操作临时对象问题本质一致。

std::make_shared本身的设计就支持直接接收目标类构造函数的入参,会在申请的堆内存上直接构造对象,不需要提前构造临时实例。直接改成如下写法即可:

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

这个改法完全符合你的需求:

  • 全程不会产生任何creature临时对象,仅会在堆上构造一次creature实例,仅当shared_ptr引用计数归零时才会触发析构,没有多余的构造、析构操作
  • 不需要额外实现creature的拷贝构造、移动构造或者拷贝赋值运算符
  • 最终得到的creature_sp指向的实例和原有写法的实例状态完全一致,等效实现原有逻辑

内容的提问来源于stack exchange,提问作者badri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:15:03