gpt4 book ai didi

c++ - std::make_unique_for_overwrite() 相对于 std::make_unique() 有何作用?

转载 作者:行者123 更新时间:2023-12-02 02:48:01 24 4
gpt4 key购买 nike

看来在 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_sharedstd::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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com