cpp 智能指针 用法
时间: 2023-06-19 20:10:57 浏览: 98
C++中的智能指针是一种用于管理动态分配的内存的智能工具。智能指针可以跟踪使用计数,并在不需要时自动删除对象。
智能指针有三种类型:unique_ptr、shared_ptr和weak_ptr。
以下是它们的用法:
1. unique_ptr:
unique_ptr 用于管理单个对象的所有权,不能被拷贝或复制,但可以转移所有权。用法示例如下:
```
std::unique_ptr<int> ptr(new int(5));
if (ptr) {
std::cout << *ptr << std::endl;
}
// 转移所有权
std::unique_ptr<int> ptr2 = std::move(ptr);
if (ptr2) {
std::cout << *ptr2 << std::endl;
}
```
2. shared_ptr:
shared_ptr 用于多个对象共享所有权,每个 shared_ptr 对象都有一个引用计数器,当引用计数器为 0 时,对象会被删除。用法示例如下:
```
std::shared_ptr<int> ptr(new int(5));
std::shared_ptr<int> ptr2 = ptr;
std::cout << ptr.use_count() << std::endl;
ptr.reset();
std::cout << ptr2.use_count() << std::endl;
```
3. weak_ptr:
weak_ptr 也用于多个对象共享所有权,但不会增加引用计数器。weak_ptr 可以通过 lock() 方法获得一个 shared_ptr 对象,用法示例如下:
```
std::shared_ptr<int> ptr(new int(5));
std::weak_ptr<int> weakPtr(ptr);
if (auto sharedPtr = weakPtr.lock()) {
std::cout << *sharedPtr << std::endl;
}
```
以上是三种智能指针的基本用法,使用智能指针可以有效避免内存泄漏和空悬指针等问题。
阅读全文