std :: make之间的区别

std::make_unique是否有像std::makes_shared一样的效率优势?

与手动构建std::unique_ptr相比:

std::make_unique<int>(1);         // vs
std::unique_ptr<int>(new int(1));

make_unique的动机主要有两方面:

  • make_unique对于创建临时make_unique是安全的,而对于明确使用new您必须记住关于不使用未命名临时对象的规则。

    foo(make_unique<T>(), make_unique<U>()); // exception safe
    
    foo(unique_ptr<T>(new T()), unique_ptr<U>(new U())); // unsafe*
    
  • make_unique的加入最终意味着我们可以告诉人们'永不'使用new而不是以前的规则来'永不'使用new除非你做了一个unique_ptr “。

  • 还有第三个原因:

  • make_unique不需要冗余类型的用法。 unique_ptr<T>(new T()) - > make_unique<T>()
  • 没有一个原因涉及使用make_shared的方式提高运行时效率(由于避免了第二次分配,代价是可能存在更高的峰值内存使用量)。

    *预计C ++ 17将包含规则更改,这意味着这不再不安全。 请参阅C ++委员会文件P0400R0和P0145R3。


    std::make_uniquestd::make_shared出于两个原因:

  • 这样你就不必显式地列出模板类型参数。
  • 使用std::unique_ptrstd::shared_ptr构造函数的其他异常安全性。 (请参阅此处的注释部分。)
  • 这并不关乎运行效率。 有一点关于控制块和T被一次性分配,但我认为这是更多的奖励,而不是这些功能存在的动机。


    你必须直接使用std::unique_ptr(new A())std::shared_ptr(new A())而不是std::make_*()原因是无法访问类A的构造函数目前的范围。

    链接地址: http://www.djcxy.com/p/78495.html

    上一篇: Differences between std::make

    下一篇: Can I rely on malloc returning NULL?