在这篇文章中,我们详细探讨了C++中智能指针的使用及其与传统new操作符的区别。通过实际代码示例,展示了std::unique_ptr、std::make_unique和std::make_shared的创建机制,以及它们如何提高代码的安全性和健壮性 2.0 使用介绍std::make_unique std::make_unique 是 C++11 标准库中的一个实用函数,它是 C++14 标...
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 而不...
1. make_unique 同 unique_ptr 、auto_ptr 等一样,都是 smart pointer,可以取代new 并且无需 delete pointer,有助于代码管理。 2. make_unique 创建并返回 unique_ptr 至指定类型的对象,这一点从其构造函数能看出来。make_unique相较于unique_ptr 则更加安全。 3. 编译器不同,make_unique 要求更新(Visual ...
std::make_unique将所有传递的参数转发给匹配的目标构造函数。因此,如果传递nullptr,它将搜索接受nullptr...
#include <cstdint>usingnamespacestd;structC{inta;intb;};intmain(intargc,char**argv){// auto c = new C();auto c=std::make_unique<C>();cerr<<c->A<<endl;return0} 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ...
经过上述论述,相比直接使用new,我们应该更倾向使用make函数。尽管make函数具有软件工程规范、异常安全和效率方面的优势。但本Item的指导原则是优先使用make函数,而不是完全依赖它们。这是因为在某些情况下不能或不应该使用它们。 例如,没有一个make函数允许指定自定义删除器(见Items 18 and 19),但是std::unique_ptr和...
Item 21 优先使用std::make_unique和std::make_shared而不是直接使用new 我们先给std::make_unique以及std::make_shared提供一个公平的竞争环境,以此开始。std::make_shared是C++ 11标准的一部分,但是,遗憾的是,std::make_unique不是的。它刚成为C++ 14的一部分。如果你在使用C++11.不要怕,因为你可以很容易...
当您不对数组进行值初始化时,数组元素将被默认构造,或者(对于基本类型)根本不会初始化。
就像你看到的那样,make_unique只是完美转发了它的参数给要创建的对象的构造函数,然后用new产生的原始指针来构造一个std::unique_ptr,最后返回一个创建的std::unique_ptr。这种形式的函数不支持数组或自定义deleter(看Item 18),但是它示范了:如果需要的话,只要做一点努力,你就能创造出make_unique。记住不要把你自己...