What does std::make_unique_for_overwrite() do vis-a-vis std::make_unique()?(与std::Make_Unique()相比,std::Make_Unique_for_Overwrite()做了什么?)
问题描述
似乎在C++20中,我们获得了一些用于智能指针的附加实用函数,包括:
template<class T> unique_ptr<T> make_unique_for_overwrite();
template<class T> unique_ptr<T> make_unique_for_overwrite(size_t n);
和std::make_shared
与std::shared_ptr
相同。为什么现有函数不是:
template<class T, class... Args> unique_ptr<T> make_unique(Args&&... args); // with empty Args
template<class T> unique_ptr<T> make_unique(size_t n);
够了吗?现有的不是使用对象的默认构造函数吗?
注意:在这些函数的早期提议中,名称为make_unique_default_init()
。
推荐答案
这些新函数与不同:
- 原始
make_XYZ
:始终初始化指向的值(显式初始化和显式初始化,请参阅standard中的§class.expl.init)。 - 新
make_XYZ_for_overwrite
:执行指向的值的&Quot;默认初始化(参见standard中的§dcl.init第7段);在典型计算机上,这意味着对于非类、非数组类型实际上没有初始化。(是的,这个术语有点令人困惑;请阅读链接中的段落。)
这是普通指针的一个功能,这是智能指针实用程序函数所不具备的:使用常规指针,您只需分配指针,而无需实际初始化指向的值:
new int
对于唯一/共享指针,您只能通过包装现有指针来实现此目的,如下所示:
std::unique_ptr<int[]>(new int[n])
现在我们有了它的包装函数。
注意:请参阅相关的ISO C++WG21proposal和this SO answer
这篇关于与std::Make_Unique()相比,std::Make_Unique_for_Overwrite()做了什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:与std::Make_Unique()相比,std::Make_Unique_for_Overwrite()做了什么?


基础教程推荐
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 设计字符串本地化的最佳方法 2022-01-01