c++ 11 智能指针
时间: 2025-01-10 09:56:18 浏览: 48
### C++11智能指针的用法和特性
#### 使用场景与优势
C++11引入了三种主要类型的智能指针:`std::unique_ptr`, `std::shared_ptr` 和 `std::weak_ptr`。这些智能指针通过自动管理对象生命周期来提高程序安全性并减少内存泄漏的风险[^1]。
#### unique_ptr 的定义与使用方法
`std::unique_ptr` 是一种独占所有权的智能指针,意味着同一时间只有一个 `unique_ptr` 可以指向某个特定的对象实例。当 `unique_ptr` 被销毁时,它所拥有的资源也会被释放。
```cpp
#include <memory>
// 创建一个指向整数的唯一指针
std::unique_ptr<int> p(new int(42));
```
#### shared_ptr 的定义与使用方法
对于需要多个所有者共享同一个对象的情况,则可以使用 `std::shared_ptr`. 它内部实现了一个引用计数机制,每当有一个新的 `shared_ptr` 复制该指针时就会增加计数值;而当最后一个持有此指针的对象超出作用域或显式删除时才会真正释放关联的堆分配空间.
```cpp
#include <memory>
void foo(std::shared_ptr<int> sp){
*sp += 5;
}
int main(){
auto ptr = std::make_shared<int>(10);
foo(ptr); // 不会触发深拷贝,因为只是传递给函数参数
}
```
#### weak_ptr 的定义与使用方法
为了避免循环引用问题,在某些情况下还需要配合 `std::weak_ptr` 来观察而不控制目标对象的生命期。这通常发生在两个对象相互保持对方存活的情况下(即A持有了B,B也持有了A),此时如果都采用强引用(`shared_ptr`)则会造成无法回收的问题.
```cpp
class Node {
public:
~Node() { /* ... */ }
private:
std::vector<std::weak_ptr<Node>> neighbors_; // 邻居节点列表只做观测用途
};
```
以上就是关于C++11中智能指针的主要介绍以及它们各自的特性和应用场景.
阅读全文
相关推荐












