码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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 进行转移所有权。
      • 适用于需要严格所有权管理的情况。
    #include 
    
    std::unique_ptr<int> ptr(new int(10));
    
    • 1
    • 2
    • 3
    1. std::shared_ptr:
      • std::shared_ptr 允许多个指针共享对同一对象的所有权。
      • 内部使用引用计数,当最后一个 std::shared_ptr 销毁时,所管理的对象才会被释放。
      • 支持拷贝构造和赋值操作。
      • 适用于需要多个指针共享同一对象的情况。
    #include 
    
    std::shared_ptr<int> ptr1(new int(10));
    std::shared_ptr<int> ptr2 = ptr1; // 共享所有权
    
    • 1
    • 2
    • 3
    • 4
    1. std::weak_ptr:
      • std::weak_ptr 是 std::shared_ptr 的弱引用,它不增加引用计数,不影响对象的生命周期。
      • 主要用于解决 std::shared_ptr 的循环引用问题。
      • 可以通过 lock() 方法获取一个指向对象的 std::shared_ptr,用于临时持有对象的引用。
    #include 
    
    std::shared_ptr<int> ptr(new int(10));
    std::weak_ptr<int> weakPtr = ptr;
    
    if (auto sharedPtr = weakPtr.lock()) {
        // 获取 std::shared_ptr,对象尚未释放
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

  • 相关阅读:
    基于粒子(Points)模拟雨雪天气效果
    MySQL数据表
    ABC 327
    Java实现图书持久化
    【已解决】immer_project immer 动态确定对象属性修改的控制不恰当
    【GoWeb项目-个人Blog】个人Blog开篇
    java 版本企业招标投标管理系统源码+功能描述+tbms+及时准确+全程电子化
    webuploader文件上传 拖拽上传 进度监听 类型控制 上传结果监听控件
    mysql explain学习记录
    2023浙沪地区MEM项目提前批面试申请最后时间表(8-11月)
  • 原文地址:https://blog.csdn.net/qq_45281807/article/details/136678492
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号