std::make_unique用法详解
时间: 2023-10-22 09:09:11 浏览: 55
std::make_unique 是 C++14 中引入的一个函数模板,用于创建一个动态分配的对象,并返回一个 std::unique_ptr 智能指针,该指针拥有对该对象的唯一所有权。它的语法如下:
```c++
template< class T, class... Args >
std::unique_ptr<T> make_unique( Args&&... args );```
其中,T 是要创建的对象类型,Args 是传递给 T 构造函数的参数列表。
使用 std::make_unique 的好处是可以避免手动管理 new 和 delete 操作,从而避免内存泄漏和空悬指针等问题。此外,std::make_unique 还可以提高代码的可读性和安全性。
例如,我们可以使用 std::make_unique 创建一个动态分配的 int 对象:
```c++
auto p = std::make_unique<int>(42);
```
这里,p 是一个 std::unique_ptr<int> 智能指针,它拥有对动态分配的 int 对象的唯一所有权,并且该对象的值为 42。
需要注意的是,std::make_unique 只能用于创建动态分配的对象,不能用于创建静态对象或数组。
相关问题
std::make_unique和std::make_shared
`std::make_unique`和`std::make_shared`都是C++11引入的内存管理工具,用于创建动态对象并返回其指针。
`std::make_unique`用于创建独占所有权的对象,即该对象的所有权只能被一个`std::unique_ptr`持有。它的语法如下:
```
template< class T, class... Args >
std::unique_ptr<T> make_unique( Args&&... args );
```
其中,`T`是要创建的对象类型,`Args`是传递给对象构造函数的参数列表。`make_unique`函数返回一个`std::unique_ptr<T>`对象,该对象拥有对新创建的`T`对象的所有权。
`std::make_shared`用于创建共享所有权的对象,即该对象可以被多个`std::shared_ptr`共享。它的语法如下:
```
template< class T, class... Args >
std::shared_ptr<T> make_shared( Args&&... args );
```
其中,`T`是要创建的对象类型,`Args`是传递给对象构造函数的参数列表。`make_shared`函数返回一个`std::shared_ptr<T>`对象,该对象拥有对新创建的`T`对象的共享所有权。
值得注意的是,`std::make_shared`相较于直接使用`std::shared_ptr<T>`创建对象,具有更好的性能和更少的内存分配次数。因此,在需要共享对象所有权时,应优先使用`std::make_shared`。
std::make_unique与g2o::make_unique
std::make_unique是C++14标准引入的一个函数模板,用于创建一个独占所有权的智能指针std::unique_ptr的对象。它接受一个可变数量的参数,并返回一个指向动态分配的对象的unique_ptr。
g2o::make_unique是g2o库中定义的一个函数模板,也用于创建一个独占所有权的智能指针g2o::unique_ptr的对象。它与std::make_unique的功能类似,但在C++11标准下提供了相同的功能。
这两个函数模板的作用是为了方便地创建独占所有权的智能指针对象,避免手动管理内存和资源释放的麻烦。它们在使用上非常类似,只是在不同的库中定义。