此场景下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
相关产品推荐
相关产品推荐

