C++ 智能指针

C++ 智能指针是一种用于管理动态内存的机制,能够在程序执行时自动释放内存,从而避免内存泄漏和悬空指针等问题。C++11 引入了三种智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。

  1. std::unique_ptr :
    • std::unique_ptr 是独占所有权的智能指针,它确保在任何时候只有一个指针可以指向所管理的对象。
    • 当 std::unique_ptr 被销毁时,它所管理的对象也会被销毁。
    • 不能复制,但可以通过 std::move 进行转移所有权。
    • 适用于需要严格所有权管理的情况。
cpp 复制代码
#include <memory>

std::unique_ptr<int> ptr(new int(10));
  1. std::shared_ptr :
    • std::shared_ptr 允许多个指针共享对同一对象的所有权。
    • 内部使用引用计数,当最后一个 std::shared_ptr 销毁时,所管理的对象才会被释放。
    • 支持拷贝构造和赋值操作。
    • 适用于需要多个指针共享同一对象的情况。
cpp 复制代码
#include <memory>

std::shared_ptr<int> ptr1(new int(10));
std::shared_ptr<int> ptr2 = ptr1; // 共享所有权
  1. std::weak_ptr :
    • std::weak_ptr 是 std::shared_ptr 的弱引用,它不增加引用计数,不影响对象的生命周期。
    • 主要用于解决 std::shared_ptr 的循环引用问题。
    • 可以通过 lock() 方法获取一个指向对象的 std::shared_ptr,用于临时持有对象的引用。
cpp 复制代码
#include <memory>

std::shared_ptr<int> ptr(new int(10));
std::weak_ptr<int> weakPtr = ptr;

if (auto sharedPtr = weakPtr.lock()) {
    // 获取 std::shared_ptr,对象尚未释放
}

智能指针的使用能够提高内存管理的安全性和可靠性,但需要谨慎使用,避免循环引用和内存泄漏等问题。

相关推荐
catchadmin29 分钟前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
开发语言·php
zhanghaha13141 小时前
C++构造函数的一些其他应用(逐词逐句保姆讲解)
c++
jimy12 小时前
c++的 Type Traits (二、更详细版本)
开发语言·c++
狗凯之家源码网2 小时前
纯 PHP+MySQL 应用市场系统源码实测!
开发语言·mysql·php
dishugj2 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言
geovindu2 小时前
rust:Memento Pattern(续)
开发语言·后端·设计模式·rust·行为模式·备忘录模
马优晨3 小时前
JAVA 中 VO 实体类是什么意思,为什么要做这个
java·开发语言·状态模式·java vo·java vo是什么
Aurorar0rua3 小时前
CS50 x 2024 Notes Python - 01
开发语言·python·学习方法
茉莉玫瑰花茶4 小时前
GO [ 标准库 ]
开发语言·后端·golang
半杯咖啡半行码4 小时前
C++11核心特性详解:从C++11到C++20 的现代C++指南
开发语言·c++