c++11智能指针实例
时间: 2024-04-06 08:25:48 浏览: 23
C++11引入了智能指针,它们是一种用于管理动态分配的内存的工具。智能指针可以自动处理内存的释放,避免了手动释放内存的麻烦和可能的内存泄漏。C++11提供了三种类型的智能指针:unique_ptr、shared_ptr和weak_ptr。
1. unique_ptr:unique_ptr是一种独占所有权的智能指针,它确保只有一个指针可以访问给定的资源。当unique_ptr超出作用域或被重新赋值时,它会自动释放所管理的资源。以下是一个unique_ptr的示例:
```cpp
#include <memory>
int main() {
std::unique_ptr<int> ptr(new int(10));
// 使用ptr指向的资源
std::cout << *ptr << std::endl;
// unique_ptr会在超出作用域时自动释放资源
return 0;
}
```
2. shared_ptr:shared_ptr是一种共享所有权的智能指针,它可以被多个指针同时访问同一个资源。shared_ptr使用引用计数来跟踪资源的使用情况,当最后一个shared_ptr超出作用域时,资源会被释放。以下是一个shared_ptr的示例:
```cpp
#include <memory>
int main() {
std::shared_ptr<int> ptr1(new int(10));
std::shared_ptr<int> ptr2 = ptr1;
// 使用ptr1或ptr2指向的资源
std::cout << *ptr1 << std::endl;
std::cout << *ptr2 << std::endl;
// shared_ptr会在最后一个引用超出作用域时释放资源
return 0;
}
```
3. weak_ptr:weak_ptr是一种弱引用的智能指针,它可以指向shared_ptr所管理的资源,但不会增加引用计数。weak_ptr主要用于解决shared_ptr的循环引用问题。以下是一个weak_ptr的示例:
```cpp
#include <memory>
int main() {
std::shared_ptr<int> ptr1(new int(10));
std::weak_ptr<int> ptr2 = ptr1;
// 使用ptr1或ptr2指向的资源
std::cout << *ptr1 << std::endl;
if (auto sharedPtr = ptr2.lock()) {
// 使用ptr2指向的资源
std::cout << *sharedPtr << std::endl;
}
// weak_ptr不会影响资源的生命周期
return 0;
}
```