std::make_unique用法详解
时间: 2023-10-22 20:09:11 浏览: 254
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::unique_ptr
std::unique_ptr是C++中的一个智能指针,用于管理动态分配的资源,并确保资源的释放。使用std::make_unique()函数可以创建std::unique_ptr对象并分配内存。例如,可以使用以下代码创建一个指向整数的std::unique_ptr对象:
```cpp
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
```
<em>1</em><em>2</em><em>3</em>
#### 引用[.reference_title]
- *1* *2* *3* [C++ std::unique_ptr 详解](https://blog.csdn.net/qq_44859843/article/details/131460426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item]
[ .reference_list ]
std::shared_ptr data
std::shared_ptr是C++标准库中的一个智能指针类,用于管理动态分配的资源。它具有引用计数机制,可以实现多个指针共享同一个对象的所有权。
在给std::shared_ptr赋值时,有三种方式可以使用:
1) 拷贝赋值:使用一个std::shared_ptr初始化另一个std::shared_ptr,这将导致引用计数加1。
2) 移动赋值:使用std::make_shared或者直接赋值一个临时创建的std::shared_ptr,这将导致原来的std::shared_ptr失去对资源的所有权,引用计数转移。
3) 使用std::move:将一个std::unique_ptr移动给std::shared_ptr,这将导致原来的std::unique_ptr失去对资源的所有权,引用计数转移。
对于std::shared_ptr的成员函数功能,具体可以参考STL的文档或笔记。
关于std::shared_ptr的初始化,当使用裸指针初始化std::shared_ptr时,如果指针为nullptr,则std::shared_ptr的_M_ptr和_M_refcount都将为nullptr;否则,将分配内存并初始化控制块。
所以,std::shared_ptr可以用于管理动态分配的资源,并且可以共享资源的所有权。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [std::shared_ptr 详解](https://blog.csdn.net/baidu_31541363/article/details/95802210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [[STL] std::shared_ptr笔记](https://blog.csdn.net/weixin_38734472/article/details/126486549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文