std::make_shared
是在C++11
中添加的一个专门用来创建智能指针的方法,而不幸的是std::make_unique
在C++11
中并没有,直到C++14
才引进来。不过实现它也是一件很容易的一件事,如下:
template<typename T, typename... Ts>
std::unique_ptr<T> make_unique(TS&&... params)
{
return std::unique_ptr<T>(new T(std::forward<Ts>(params)...));
}
上面的这个版本是不支持创建数组类型的智能指针,也不支持自定义删除器的。尽管如此,当你需要make_unique
的时候,你也可以很简单的实现一个简易版本。
还记得我们在之前是怎么创建智能指针的吗?,new
一个原始指针,然后用它初始化一个智能指针类型的变量即可,那么既然已经有了创建智能指针的方法,本文为何又要引入第二种方法呢?因为使用make系列函数创建智能指针要比原始方法创建有诸多优点,因此在实际使用过程中应该优先使用make系列函数来创建智能指针。那么到底有哪些优点呢,本文将会一一讲解。
- 避免重复,代码更清晰,不容易引入不一致的代码导致bug。
auto upw1(std::make_unique<Widget>());
std::unique_ptr<Widgte> upw2(