shared_ptr 代码示例
时间: 2023-07-29 17:08:43 浏览: 41
当使用 shared_ptr 时,可以通过以下示例代码来理解其用法:
```cpp
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass Constructor" << std::endl;
}
~MyClass() {
std::cout << "MyClass Destructor" << std::endl;
}
void doSomething() {
std::cout << "Doing something..." << std::endl;
}
};
int main() {
// 创建一个 shared_ptr,并自动管理 MyClass 对象的内存
std::shared_ptr<MyClass> ptr1(new MyClass());
// 使用箭头运算符访问对象的成员函数
ptr1->doSomething();
// 引用计数加1,ptr1 和 ptr2 共享同一个对象
std::shared_ptr<MyClass> ptr2 = ptr1;
// 使用星号运算符访问对象的成员函数
(*ptr2).doSomething();
// 引用计数减1
ptr1.reset();
// 引用计数为0,自动释放对象的内存
ptr2.reset();
return 0;
}
```
在这个示例中,我们创建了一个 `MyClass` 类,它具有构造函数、析构函数和一个 `doSomething` 成员函数。我们使用 `std::shared_ptr` 来管理 `MyClass` 对象的内存。
在 `main` 函数中,我们首先创建一个 `ptr1` shared_ptr,它拥有一个新创建的 `MyClass` 对象。然后,我们使用箭头运算符和星号运算符来访问 `MyClass` 对象的成员函数。
接下来,我们创建了另一个 `ptr2` shared_ptr,并将其初始化为 `ptr1`。这意味着它们共享同一个 `MyClass` 对象,并且引用计数加1。
最后,我们通过 `reset` 函数将 `ptr1` 和 `ptr2` 的引用计数减1。当引用计数为0时,`shared_ptr` 会自动释放所管理的内存,调用 `MyClass` 对象的析构函数。
在输出中,你可以观察到对象的构造函数和析构函数的调用顺序,以及引用计数的变化情况。这展示了 shared_ptr 的引用计数和自动内存管理的特性。