C++ 智能指针

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

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

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

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

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

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

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

相关推荐

  1. C++ 智能指针

    2024-03-14 14:28:07       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 14:28:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 14:28:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 14:28:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 14:28:07       18 阅读

热门阅读

  1. git ssh建立连接

    2024-03-14 14:28:07       18 阅读
  2. 渗透测试修复笔记 - 02 Docker Remote API漏洞

    2024-03-14 14:28:07       24 阅读
  3. 介绍一下mysql的存储结构和存储逻辑

    2024-03-14 14:28:07       22 阅读
  4. docker和docker-compose安装

    2024-03-14 14:28:07       20 阅读
  5. MySQL 锁

    MySQL 锁

    2024-03-14 14:28:07      18 阅读
  6. 对象的组合复用学习笔记

    2024-03-14 14:28:07       17 阅读
  7. opencv install

    2024-03-14 14:28:07       22 阅读
  8. rt-thread之sal+lwip的tcp客户端示例记录

    2024-03-14 14:28:07       23 阅读
  9. Python之三数之和为0

    2024-03-14 14:28:07       19 阅读
  10. Vite:轻量级的前端构建工具

    2024-03-14 14:28:07       18 阅读
  11. 掌握堆:Python算法实践中的高效数据管理与优化

    2024-03-14 14:28:07       24 阅读