C++中的智能指针是一种对象,它可以像常规指针一样存储对象的地址,但它有一个额外的特性:当没有任何东西引用该地址时,智能指针会自动删除该对象。这种特性可以帮助我们避免内存泄漏。在C++11及以后版本中,有几种类型的智能指针:unique_ptr、shared_ptr和weak_ptr。本文将重点介绍shared_ptr。
首先来看看如何创建一个shared_ptr。我们可以使用std::make_shared函数来创建一个新的shared_ptr:
std::shared_ptr<int> p1 = std::make_shared<int>(42);
在这个例子中, 我们创建了一个新的int类型值为42,并且将其封装在了p1这个共享型智能指针里。
如果你已经有了一个原始(raw) 指针,并且想要把它转换为 shared pointer, 你应该使用 std::share 函数:
int* raw = new int(42);
std::shared_ptr<int> p2(raw);
但是要注意,在转换原始(raw) 指向后,请确保没有其他 shared pointer 或者 raw pointer 仍然引用到同样内存区域。
接下来让我们看一下如何访问 shared pointer 所管理资源:
std::cout << *p1 << std::endl; // 输出: 42
就像普通指针一样,我们可以使用解引用运算符(*)来访问 shared pointer 所指向的对象。
shared_ptr 的一个重要特性是引用计数。每当一个新的 shared_ptr 指向同一对象,引用计数就会增加。当一个 shared_ptr 被销毁或者不再指向该对象时,引用计数就会减少。当没有任何东西再指向该对象时(即:引用计数为0),那么这个对象就会被自动删除。
{
std::shared_ptr<int> p3 = p1; // 引用计数增加
std::cout << p1.use_count() << std::endl; // 输出: 2
} // 当p3离开其作用域后, 引起其被销毁, 引起p1的use_count减少
std::cout << p1.use_count() << std::endl; // 输出: 1
在这个例子中, 我们创建了另外一个共享型智能指针p3,并且让它和p1都同时管理同样的资源。因此在创建了p3后,我们可以看到use_count变成了2. 当离开作为域后,p3被销毁,并且导致use_count变回到了原来值。
最后要注意,在使用shared pointer时有两点需要注意:
- 不要让两个独立创建的 shared pointer 管理同一资源。
- 不要使用 delete 删除 shared pointer 管理的资源。
以上就是关于C++中shared_ptr的基本使用教程。希望这篇文章能帮助你理解和使用shared_ptr,从而更好地管理内存资源。
云服务器推荐
蓝易云国内/海外高防云服务器推荐
蓝易云采用KVM高性能架构,稳定可靠,安全无忧!
蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。
海外免备案云服务器链接:www.tsyvps.com
蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。