介绍下std::make_unique
时间: 2023-12-08 12:21:04 浏览: 98
std::make_unique是C++14引入的新特性,用于创建一个独占式指针(unique pointer)并进行内存分配。它的语法类似于std::make_shared,但是它创建的是一个独占式指针,而不是一个共享指针。std::make_unique可以避免手动分配和释放内存所带来的错误,能够更有效地管理内存,并提高程序的安全性和稳定性。使用时需要包含头文件<memory>。
相关问题
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`。
C++学习之-std::make_unique 与std::unique_ptr
std::make_unique 是 C++14 中引入的一个函数模板,用于创建一个指向动态分配对象的 std::unique_ptr。它的语法如下:
```cpp
template< class T, class... Args >
std::unique_ptr<T> make_unique( Args&&... args );
```
std::make_unique 比直接使用 new 更安全,因为它可以避免发生内存泄漏,即使在构造函数抛出异常的情况下。
下面是一个使用 std::make_unique 的示例:
```cpp
auto ptr = std::make_unique<int>(42);
```
这将创建一个指向 int 类型的 std::unique_ptr,并将其初始化为值 42。
在回答你其他的问题之前,请告诉我你想了解的具体内容,以便我能够更好地回答你。谢谢!
阅读全文