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

智能指针复制消除与局部自动存储:unique_ptr是否避免复制?

问题解答

这里不会延长local_line的生命周期,而且make_unique构造新对象时确实会复制local_line。

具体拆解:

  • local_line是addLine函数内的局部栈变量,函数执行完毕后就会被销毁,unique_ptr完全不会影响它的生命周期。
  • make_unique<Line>(local_line)的本质是在堆上创建一个Line对象,并调用Line的拷贝构造函数,把local_line的内容完整复制到这个堆对象中。之后unique_ptr会接管该堆对象的所有权,直到Page中的这个unique_ptr被释放(比如Page对象销毁,或者对应的元素被移除)。

如果想避免复制,可以改用移动构造:将代码改为make_unique<Line>(std::move(local_line)),这样会把local_line的资源转移到堆对象里,而非复制,效率更高。但要注意,移动后local_line会处于有效但未定义的状态,后续不能再使用它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:18:16