【发布时间】:2021-06-01 14:29:36
【问题描述】:
我在这里看到了高度赞成的答案 (https://stackoverflow.com/a/37885232/3754760),有两种方法可以将 unique_ptr 转换为 shared_ptr,即首先创建 unique_ptr,然后将其 move-ing 到 shared_ptr,以及将 unique_ptr 直接分配给 shared_ptr。
例子:
std::unique_ptr<std::string> unique = std::make_unique<std::string>("test");
std::shared_ptr<std::string> shared = std::move(unique);
或:
std::shared_ptr<std::string> shared = std::make_unique<std::string>("test");
以上两者在性能方面是否等效?其次,当我做这样的事情时,我会看到类似Moving a temporary object prevents copy elision 的警告:
std::shared_ptr<std::string> shared = std::move(std::make_unique<std::string>("test"));
作为一个对智能指针很陌生的人,有人能解释一下这个警告的含义以及它为什么会出现在第三个例子中吗?谢谢!
【问题讨论】:
标签: c++ c++11 smart-pointers