std::make_unique和std::make_shared
时间: 2023-07-02 22:08:27 浏览: 119
`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`。
阅读全文