c++ 引用计数用法示例
时间: 2023-07-31 14:13:10 浏览: 70
当涉及到资源的共享和管理时,引用计数是一种常见的技术。在C++中,可以通过自定义类来实现引用计数。下面是一个简单的示例:
```cpp
#include <iostream>
class RefCounted {
private:
int count; // 引用计数
public:
RefCounted() : count(0) {}
void addRef() {
count++;
}
void release() {
count--;
if (count == 0) {
delete this; // 当引用计数为0时,释放对象内存
}
}
void printCount() {
std::cout << "引用计数:" << count << std::endl;
}
};
int main() {
RefCounted* obj1 = new RefCounted();
obj1->addRef();
obj1->printCount();
RefCounted* obj2 = obj1;
obj2->addRef();
obj2->printCount();
obj1->release();
obj1->printCount();
obj2->release();
obj2->printCount();
return 0;
}
```
在上面的示例中,`RefCounted` 类实现了一个简单的引用计数功能。通过 `addRef()` 方法增加引用计数,通过 `release()` 方法减少引用计数。当引用计数为0时,对象会被释放。
在 `main()` 函数中,我们创建了两个指向 `RefCounted` 对象的指针 `obj1` 和 `obj2`,并对它们进行了引用计数的增加和减少操作。最终,当引用计数为0时,对象会被自动释放。
输出结果如下:
```
引用计数:1
引用计数:2
引用计数:1
引用计数:0
```
这个示例演示了引用计数的基本用法,但在实际应用中,可能还需要考虑线程安全性、循环引用等问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)