std::shared_ptr的使用方法
时间: 2023-07-26 20:03:42 浏览: 110
c++11&14-智能指针要点汇总
使用std::shared_ptr可以分为以下几个步骤:
1. 头文件:首先需要包含头文件<memory>。
2. 创建对象:使用std::make_shared函数创建一个shared_ptr对象,该函数可以自动推断指向对象的类型,并返回一个指向该对象的shared_ptr。
```
std::shared_ptr<int> p1 = std::make_shared<int>(42);
```
3. 复制和赋值:可以将shared_ptr对象赋值给另一个shared_ptr对象,或者将其作为参数传递给函数。每个shared_ptr对象都会记录指向同一对象的指针数目,当最后一个指针离开作用域时,内存才会被自动释放。
```
std::shared_ptr<int> p2 = p1;
void foo(std::shared_ptr<int> p);
foo(p1);
```
4. 访问对象:可以使用解引用操作符*或->来访问shared_ptr指向的对象,也可以使用get()函数来获得指向对象的原始指针。需要注意的是,当shared_ptr对象被释放后,指向该对象的原始指针将变为无效。
```
int i = *p1;
p1->foo();
int* pi = p1.get();
```
5. 自定义删除器:可以提供一个自定义的删除器函数来释放指向对象的内存,该函数将在最后一个指针离开作用域时被调用。
```
std::shared_ptr<int> p3(new int[10], [](int* p){ delete[] p; });
```
需要注意的是,使用std::shared_ptr时需要避免循环引用的问题,即两个或多个对象互相持有对方的shared_ptr,导致它们的引用计数永远不会到达0,从而导致内存泄漏。为了避免这种问题,可以使用std::weak_ptr或手动解除循环引用。
阅读全文