请详细说明C加加的shared_ptr
时间: 2023-10-17 15:33:40 浏览: 77
C++的shared_ptr是一种智能指针,它可以自动管理动态分配的内存,避免了手动管理内存的繁琐和容易出错的问题。
shared_ptr内部通过引用计数的方式来管理资源,每个shared_ptr都拥有一个计数器,记录有多少个shared_ptr指向同一个资源。当计数器为0时,资源被自动释放。此外,shared_ptr还使用了弱引用的概念,可以避免循环引用导致的内存泄漏。
shared_ptr与unique_ptr不同,可以被多个指针共享,因此可以用来管理共享资源。同时,shared_ptr还提供了自定义删除器的功能,可以在释放资源时调用自定义的函数。
使用shared_ptr需要包含头文件<memory>,然后可以通过以下方式创建shared_ptr对象:
```C++
std::shared_ptr<int> p1 = std::make_shared<int>(42); // 创建一个指向int类型的shared_ptr对象
std::shared_ptr<int> p2(p1); // 创建一个指向p1所指向的资源的shared_ptr对象
std::shared_ptr<int> p3 = std::move(p1); // 创建一个指向p1所指向的资源的shared_ptr对象,并将p1置为null
```
此外,也可以使用自定义的删除器:
```C++
std::shared_ptr<int> p4(new int, [](int* p){delete p;}); // 创建一个指向int类型的shared_ptr对象,并使用自定义的删除器
```
需要注意的是,shared_ptr可能会出现多个shared_ptr指向同一个资源,导致资源被提前释放或者重复释放的问题。此外,shared_ptr也无法处理循环引用的情况,需要使用weak_ptr来避免。
阅读全文