作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看来在 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
:执行指向值的“默认初始化”(参见standard中的§ dcl.init,第7段);在典型的机器上,这意味着对于非类、非数组类型实际上没有初始化。 (是的,这个术语有点令人困惑;请阅读链接中的段落。)这是普通指针的一个功能,智能指针实用函数不提供该功能:使用常规指针,您可以只进行分配,而无需实际初始化指向的值:
new int
对于唯一/共享指针,您只能通过包装现有指针来实现此目的,如下所示:
std::unique_ptr<int[]>(new int[n])
现在我们有一个包装函数。
注意:请参阅相关的 ISO C++ WG21 proposal以及this SO answer
关于c++ - std::make_unique_for_overwrite() 相对于 std::make_unique() 有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050872/
看来在 C++20 中,我们为智能指针提供了一些额外的实用函数,包括: template unique_ptr make_unique_for_overwrite(); template unique
我是一名优秀的程序员,十分优秀!