详细说明智能指针unique_ptr和shared_ptr的构造方法
时间: 2023-09-10 21:11:02 浏览: 106
智能指针是C++11中引入的一个重要特性,用于管理动态分配的内存。C++标准库提供了两种智能指针:unique_ptr和shared_ptr。
unique_ptr是一种独占式智能指针,只能有一个指针指向同一个对象,不能被复制或共享,但可以被移动。unique_ptr的构造方法如下:
1. 使用new运算符创建指针并将其管理:
```c++
std::unique_ptr<int> ptr(new int(10));
```
2. 使用make_unique函数创建指针并将其管理:
```c++
auto ptr = std::make_unique<int>(10);
```
shared_ptr是一种共享式智能指针,多个指针可以指向同一个对象,可以被复制或共享,会自动计数,当计数为0时,对象会被自动删除。shared_ptr的构造方法如下:
1. 使用new运算符创建指针并将其管理:
```c++
std::shared_ptr<int> ptr(new int(10));
```
2. 使用make_shared函数创建指针并将其管理:
```c++
auto ptr = std::make_shared<int>(10);
```
以上是智能指针unique_ptr和shared_ptr的构造方法,需要注意的是,使用智能指针时不需要手动释放内存,智能指针会自动管理内存。
相关问题
c++ 智能指针 unique_ptr
unique_ptr 是 C++ 中的智能指针,用于管理动态分配的对象。它的特点是独占资源,即同一时间只能有一个 unique_ptr 指向同一个对象,确保了资源的独占性和自动释放。当 unique_ptr 被销毁或者重置时,它所管理的对象也会被自动释放。
unique_ptr 的使用相对简单,可以通过以下方式创建一个 unique_ptr 对象:
```
std::unique_ptr<DataType> ptr = std::make_unique<DataType>(args);
```
其中,DataType 是指向的对象类型,args 是用于构造 DataType 对象的参数。
unique_ptr 还提供了一些常用的操作方法,比如访问指针所指的对象可以使用 `*` 或者 `->` 运算符,重置指针可以使用 `reset` 方法,获取指针可以使用 `get` 方法等等。此外,unique_ptr 还支持移动语义,可以通过 `std::move` 将 unique_ptr 转移给其他 unique_ptr。
需要注意的是,unique_ptr 不支持复制语义,即不能直接进行复制操作。如果需要共享资源,可以考虑使用 shared_ptr。
C++ 智能指针 shared_ptr释放
shared_ptr是C++中的智能指针,它采用引用计数的方法来实现释放指针所指向的资源。当使用shared_ptr时,它会记录有多少个shared_ptr指向同一个对象,只有当最后一个shared_ptr被销毁时,该对象的内存才会被释放。因此,shared_ptr可以自动管理内存,不需要手动释放。
在代码中,使用shared_ptr可以像普通指针一样操作对象。当需要创建一个shared_ptr对象时,可以使用std::make_shared函数来构造,如下所示:
```
std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(10);
```
可以通过将shared_ptr赋值给其他shared_ptr来共享资源,如下所示:
```
std::shared_ptr<int> sharedPtr2 = sharedPtr1;
```
当所有的shared_ptr都被销毁时,内存会自动释放。可以使用use_count()函数获取shared_ptr的引用计数,如下所示:
```
std::cout << "sharedPtr2 use count: " << sharedPtr2.use_count() << std::endl;
```
当引用计数为0时,内存会被自动释放。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [C++智能指针shared_ptr分析](https://download.csdn.net/download/weixin_38705004/13788082)[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_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解](https://blog.csdn.net/chenlycly/article/details/130918547)[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_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文