std::make_unique
是否有像 std::make_shared
这样的效率优势?
与手动构建 std::unique_ptr
相比:
std::make_unique<int>(1); // vs
std::unique_ptr<int>(new int(1));
原文由 NFRCR 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::make_unique
是否有像 std::make_shared
这样的效率优势?
与手动构建 std::unique_ptr
相比:
std::make_unique<int>(1); // vs
std::unique_ptr<int>(new int(1));
原文由 NFRCR 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::make_unique
和 std::make_shared
有两个原因:
std::unique_ptr
或 std::shared_ptr
构造函数的额外异常安全性。 (请参阅 此处 的注释部分。)这与运行时效率无关。有一点关于控制块和 T
被一次性分配,但我认为这更多的是奖励,而不是这些功能存在的动机。
原文由 Timothy Shields 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
2 回答841 阅读✓ 已解决
2 回答731 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
make_unique
背后的动机主要有两个方面:make_unique
可以安全地创建临时对象,而明确使用new
您必须记住不使用未命名临时对象的规则。make_unique
最后意味着我们可以告诉人们“从不”使用new
而不是之前的规则“从不”使用new
一个unique_ptr
“。还有第三个原因:
make_unique
不需要冗余类型使用。unique_ptr<T>(new T())
->make_unique<T>()
没有一个原因涉及使用
make_shared
的方式提高运行时效率(由于避免了第二次分配,代价是可能更高的峰值内存使用率)。\* 预计 C++17 将包含一个规则更改,这意味着这不再是不安全的。请参阅 C++ 委员会论文 P0400R0 和 P0145R3 。