shared_ptr实现
时间: 2023-09-07 07:17:52 浏览: 103
shared_ptr是C++中的智能指针,用于管理动态分配的对象。它通过引用计数的方式跟踪指向对象的所有shared_ptr,并在引用计数为零时自动释放内存。下面是一个简单的示例,展示了如何使用shared_ptr:
```cpp
#include <iostream>
#include <memory>
int main() {
// 创建一个动态分配的整数对象
std::shared_ptr<int> ptr(new int(42));
// 使用shared_ptr访问对象
std::cout << "Value: " << *ptr << std::endl;
std::cout << "Address: " << ptr.get() << std::endl;
// 创建一个新的shared_ptr来共享同一个对象
std::shared_ptr<int> ptr2 = ptr;
// 输出引用计数
std::cout << "Reference count: " << ptr.use_count() << std::endl;
// 修改共享对象的值
*ptr = 100;
// 输出新的值
std::cout << "New value: " << *ptr2 << std::endl;
// 手动释放一个shared_ptr
ptr.reset();
// 输出引用计数(为1,因为ptr已释放)
std::cout << "Reference count: " << ptr2.use_count() << std::endl;
return 0;
}
```
在这个示例中,我们创建了一个动态分配的整数对象,并使用shared_ptr进行管理。然后,我们创建了另一个shared_ptr来共享同一个对象。无论哪个shared_ptr被释放,只要仍有其他shared_ptr引用该对象,内存就不会被释放。通过use_count()函数,我们可以获得当前对象的引用计数。
值得注意的是,shared_ptr使用引用计数,这意味着如果存在循环引用(即两个或多个shared_ptr相互引用),对象可能不会被正确释放,从而导致内存泄漏。为了避免这种情况,可以使用weak_ptr来解决循环引用问题。
阅读全文