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

此场景下std::unique_ptr的行为?两指针是否必指向不同对象?

问题解答

首先明确两个关键事实:

  • Random::get({object1, object2})的两次调用是独立的随机选择,有可能两次选中同一个源对象(比如两次都选object1,或者两次都选object2),但这和最终指针指向的对象无关。
  • std::make_unique<Class>(...)的作用是在堆上分配新内存,并创建一个Class的新实例——这里的参数是所选源对象的拷贝(通过Class的拷贝构造函数生成),每次调用make_unique都会执行一次全新的堆内存分配和对象构造。

所以结论是:这两个std::unique_ptr必然始终指向不同的对象。哪怕两次Random::get选中了同一个源对象,make_unique也会基于这个源对象的拷贝创建两个完全独立的堆实例,它们的内存地址完全不同,unique_ptr自然指向不同的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:05:29