智能指针shared_ptr 例子
时间: 2024-09-12 15:00:39 浏览: 47
C++11 std::shared_ptr总结与使用示例代码详解
智能指针`shared_ptr`是C++标准库中的一部分,它提供了一个引用计数机制来跟踪和管理动态分配的资源。当`shared_ptr`对象被创建时,它会关联一个指向动态分配的对象的指针,并且维护一个引用计数,记录有多少个`shared_ptr`实例指向同一个对象。当`shared_ptr`实例被销毁或者其所有权被转移时,引用计数会相应减少。当引用计数降至零时,指向的对象会被自动删除,释放资源。
下面是一个简单的例子来展示如何使用`shared_ptr`:
```cpp
#include <iostream>
#include <memory>
int main() {
// 创建一个指向int的shared_ptr对象
std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
// 使用另一个shared_ptr对象引用同一资源
std::shared_ptr<int> ptr2 = ptr1;
// 输出当前引用计数,应该为2
std::cout << "ptr1的引用计数: " << ptr1.use_count() << std::endl;
std::cout << "ptr2的引用计数: " << ptr2.use_count() << std::endl;
// 通过ptr1修改值
*ptr1 = 20;
// 打印通过ptr2观察到的值,应该输出20
std::cout << "*ptr2的值: " << *ptr2 << std::endl;
// ptr1被销毁,引用计数减1
ptr1.reset();
// 输出当前引用计数,现在应该只有1
std::cout << "ptr2的引用计数: " << ptr2.use_count() << std::endl;
// 当ptr2也被销毁时,引用计数再次减1,降至0,动态分配的int对象被删除
return 0;
}
```
在这个例子中,我们首先使用`std::make_shared`创建了一个动态分配的`int`对象,并将其与`ptr1`关联。然后我们创建了另一个`shared_ptr`对象`ptr2`,使其指向相同的资源,这时引用计数为2。通过`ptr1`修改了关联资源的值,这个修改也能通过`ptr2`观察到,因为它们都指向同一个资源。当`ptr1`被销毁时,引用计数减1,最后当`ptr2`也被销毁时,引用计数减至0,动态分配的资源被自动删除。
阅读全文