关于std::unique_ptr的使用的原则、要求和建议? A. Func(unique_ptr<Foo>(new Foo()), Bar()); B. auto ptr = std::make_unique<MyClass>(0, 1); C. Func(make_unique<Foo>(), Bar()); D. std::unique_ptr<MyClass> ptr(new MyClass(0, 1));
时间: 2024-04-09 14:30:46 浏览: 75
MSVC C++ STL 源码解析系列.md
关于std::unique_ptr的使用,有一些原则、要求和建议如下:
1. 避免使用裸指针直接初始化unique_ptr。建议使用std::make_unique或者std::unique_ptr的构造函数来初始化unique_ptr,这样可以更好地管理资源的生命周期。
2. 使用std::make_unique来创建unique_ptr。std::make_unique是C++14引入的函数模板,能够在动态内存分配和对象构造之间提供更强的异常安全性。因此,在C++14及以上版本中,推荐使用std::make_unique来创建unique_ptr。
3. 尽量使用初始化列表初始化unique_ptr。这样可以避免在构造函数体中进行资源分配,并且可以保证异常安全性。
基于上述原则和要求,对于给出的选项,正确的选择是B和C。
选项A中,使用了unique_ptr的构造函数直接初始化,这种方式不够安全。
选项D中,使用了裸指针直接初始化unique_ptr,同样不够安全。
因此,建议选择B或C中的方式来使用std::unique_ptr。
阅读全文