Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
c++中如何使用shared_ptr管理对象_c++ shared_ptr使用方法_创想鸟

c++中如何使用shared_ptr管理对象_c++ shared_ptr使用方法

shared_ptr通过引用计数自动管理对象生命周期,推荐使用make_shared创建,支持共享所有权与自定义删除器,需避免循环引用和裸指针重复构造,有效防止内存泄漏。

c++中如何使用shared_ptr管理对象_c++ shared_ptr使用方法

shared_ptr 是 C++11 引入的智能指针,用于自动管理动态分配对象的生命周期。它通过引用计数机制确保多个 shared_ptr 可以共享同一个对象,当最后一个指向该对象的 shared_ptr 被销毁或重置时,对象会自动被删除,防止内存泄漏。

创建 shared_ptr

使用 std::make_shared 是最推荐的方式,因为它更高效且异常安全:auto ptr = std::make_shared();auto ptr = std::make_shared(42);也可以用原始指针构造(不推荐直接使用裸指针):std::shared_ptr ptr(new MyClass());但应避免写成 shared_ptr(new T) 这种形式,以防异常导致内存泄漏。

共享所有权

多个 shared_ptr 可以指向同一对象,引用计数会自动增加和减少:auto p1 = std::make_shared(100);auto p2 = p1; // 引用计数 +1auto p3 = p1; // 引用计数变为 3此时三个指针共享同一个 int 对象,只有当全部离开作用域,对象才会被释放。

自定义删除器

如果需要特殊清理逻辑(如调用 fclose 或 delete[]),可以指定删除器:auto deleter = [](MyClass* p) { delete p; std::cout std::shared_ptr ptr(new MyClass(), deleter);删除器在引用计数归零时被调用,适用于资源非普通 new/delete 管理的情况。

获取原始指针和检查状态

可通过 get() 获取底层原始指针(慎用,不要手动 delete):MyClass* raw = ptr.get();检查是否为空或有效:if (ptr) { /* 非空 */ }if (!ptr) { /* 空指针 */ }

注意事项

避免循环引用:两个对象互相持有对方的 shared_ptr 会导致引用计数永不归零。解决方法是使用 std::weak_ptr 打破循环。不要将同一个裸指针多次交给不同的 shared_ptr,这会导致重复释放。

基本上就这些。合理使用 shared_ptr 能显著提升代码安全性与可维护性。

以上就是c++++中如何使用shared_ptr管理对象_c++ shared_ptr使用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477737.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++怎么实现一个斐波那契数列_c++斐波那契数列实现方法
上一篇 2025年12月19日 02:17:49
c++中如何统计字符串中某个字符的次数_c++字符统计方法
下一篇 2025年12月19日 02:18:06

相关推荐

  • Spring Boot 的自动配置原理是什么?(@SpringBootApplication)

    Spring Boot 的自动配置原理是什么?(@SpringBootApplication)Spring Boot 的自动配置原理是什么?(@SpringBootApplication)Spring Boot 的自动配置原理是什么?(@SpringBootApplication)Spring Boot 的自动配置原理是什么?(@SpringBootApplication)

    Spring Boot自动配置基于“约定优于配置”和“有主见但可扩展”的设计哲学,通过@SpringBootApplication注解整合@Configuration、@ComponentScan和@EnableAutoConfiguration,实现组件自动装配。其核心是@EnableAutoCo…

    2026年9月27日 • 用户投稿
    000
  • 什么是泛型?泛型擦除是什么意思?有什么好处和局限?

    什么是泛型?泛型擦除是什么意思?有什么好处和局限?什么是泛型?泛型擦除是什么意思?有什么好处和局限?什么是泛型?泛型擦除是什么意思?有什么好处和局限?什么是泛型?泛型擦除是什么意思?有什么好处和局限?

    泛型通过类型参数提升代码复用与编译期类型安全,Java采用泛型擦除机制以兼容旧版本并简化JVM,但导致运行时无法获取泛型信息,需通过Class对象、通配符、类型令牌等策略应对。 泛型,简单来说,就是我们在编写代码时,能够让方法、类或接口处理多种数据类型的一种能力。它就像给我们的代码加了一层“智能外壳…

    2026年9月27日 • 用户投稿
    000
  • sublime怎么处理超大日志文件_sublime超大日志文件处理技巧

    sublime怎么处理超大日志文件_sublime超大日志文件处理技巧sublime怎么处理超大日志文件_sublime超大日志文件处理技巧sublime怎么处理超大日志文件_sublime超大日志文件处理技巧sublime怎么处理超大日志文件_sublime超大日志文件处理技巧

    通过设置大文件提示阈值和关闭高亮索引功能,可提升Sublime Text处理大日志文件的性能;2. 启用只读模式并分段查看,结合外部工具拆分文件,能有效避免卡顿崩溃;3. 对于GB级日志,建议配合Less、LogExpert等专用工具使用以获得更佳效率。 Sublime Text 虽然轻量高效,但在…

    2026年9月27日 • 用户投稿
    000
  • sublime怎么解决中文乱码问题_sublime中文乱码修复方法

    sublime怎么解决中文乱码问题_sublime中文乱码修复方法sublime怎么解决中文乱码问题_sublime中文乱码修复方法sublime怎么解决中文乱码问题_sublime中文乱码修复方法sublime怎么解决中文乱码问题_sublime中文乱码修复方法

    Sublime Text出现中文乱码主要因编码识别错误,解决方法包括:安装ConvertToUTF8插件以支持GBK等编码;手动通过Reopen with Encoding选择正确编码;将文件保存为UTF-8格式提升兼容性;注意插件在新版中的兼容性,可选用Codecs37替代。统一使用UTF-8编码…

    2026年9月26日 • 用户投稿
    000
  • x浏览器更新失败是什么问题_x浏览器版本自动更新失败解决方法

    x浏览器更新失败是什么问题_x浏览器版本自动更新失败解决方法x浏览器更新失败是什么问题_x浏览器版本自动更新失败解决方法x浏览器更新失败是什么问题_x浏览器版本自动更新失败解决方法x浏览器更新失败是什么问题_x浏览器版本自动更新失败解决方法

    更新失败可能因网络、存储或权限问题导致。1. 切换稳定Wi-Fi并检查更新;2. 清理存储,确保1GB以上空间;3. 手动下载官方APK并允许未知来源安装;4. 关闭安全类后台程序;5. 清除应用商店缓存与数据,重授予权限后重试。 如果您在尝试更新x浏览器时遇到更新失败的问题,可能是由于网络连接不稳…

    2026年9月26日 • 用户投稿
    000
  • 浅谈 Windows 桌面端触摸架构演进

    浅谈 Windows 桌面端触摸架构演进浅谈 Windows 桌面端触摸架构演进浅谈 Windows 桌面端触摸架构演进浅谈 Windows 桌面端触摸架构演进

    我在和小伙伴水触摸相关的坑,说到了上古的触摸,很难和小伙伴统一知识,于是就写了本文用于告诉大家,桌面端的触摸架构是如何一步步演进的 所有触摸架构都建立在系统之上,和系统版本相关。所以可以通过系统划分。虽然说是触摸架构,但是我能知道的也就是应用层面的接口和编程方法,如果是小伙伴被标题吸引过来的,想看触…

    2026年9月26日 • 用户投稿
    200
  • CountDownLatch, CyclicBarrier, Semaphore 的使用场景与区别

    CountDownLatch, CyclicBarrier, Semaphore 的使用场景与区别CountDownLatch, CyclicBarrier, Semaphore 的使用场景与区别CountDownLatch, CyclicBarrier, Semaphore 的使用场景与区别CountDownLatch, CyclicBarrier, Semaphore 的使用场景与区别

    CountDownLatch用于主线程等待其他线程完成操作,CyclicBarrier用于多线程相互等待至屏障点后集体执行,Semaphore用于控制并发访问资源的线程数量。 CountDownLatch, CyclicBarrier, Semaphore 都是并发编程中用于线程同步的工具,但它们的…

    2026年9月26日 • 用户投稿
    600
  • 教程 win10打印机显示在未指定图文解决教程

    教程 win10打印机显示在未指定图文解决教程教程 win10打印机显示在未指定图文解决教程教程 win10打印机显示在未指定图文解决教程教程 win10打印机显示在未指定图文解决教程

    相信不少在办公室工作的白领朋友对打印机都很熟悉,但在使用过程中,有时系统会弹出打印机状态为“未指定”的提示。这通常是由于打印机驱动程序出现问题引起的,我们只需要安装或升级到最新版本的驱动程序即可解决问题。 首先,按下键盘上的“Win+R”组合键打开运行窗口,在其中输入命令“devmgmt.msc”,…

    2026年9月26日 • 用户投稿
    000
  • 基于Quarkus的云原生Java开发:启动时间低于0.5秒的实践方案

    基于Quarkus的云原生Java开发:启动时间低于0.5秒的实践方案基于Quarkus的云原生Java开发:启动时间低于0.5秒的实践方案基于Quarkus的云原生Java开发:启动时间低于0.5秒的实践方案基于Quarkus的云原生Java开发:启动时间低于0.5秒的实践方案

    Quarkus通过GraalVM Native Image预编译实现启动时间低于0.5秒,需配置pom.xml插件、优化依赖、使用Quarkus CLI并监控调优。 Quarkus通过预编译和GraalVM Native Image等技术,让Java应用在云原生环境中拥有极低的启动时间和内存占用。本…

    2026年9月26日 • 用户投稿
    500
  • 笔记本宽带连接错误797怎么办

    笔记本宽带连接错误797怎么办笔记本宽带连接错误797怎么办笔记本宽带连接错误797怎么办笔记本宽带连接错误797怎么办

    使用宽带拨号上网是目前许多用户接入互联网的常用方式。然而,部分用户在尝试建立连接时可能会遇到错误代码797,导致无法正常上网。那么,当笔记本出现宽带连接错误797时该如何处理呢?接下来就由小编为大家介绍具体的解决方法。 一、删除原有拨号连接 首先点击“开始”菜单,进入“控制面板”,依次选择“网络和I…

    2026年9月26日 • 用户投稿
    000
  • JavaAI实战:基于DeepLearning4j实现目标检测模型部署

    JavaAI实战:基于DeepLearning4j实现目标检测模型部署JavaAI实战:基于DeepLearning4j实现目标检测模型部署JavaAI实战:基于DeepLearning4j实现目标检测模型部署JavaAI实战:基于DeepLearning4j实现目标检测模型部署

    答案:在Java中通过DeepLearning4j部署目标检测模型需完成模型转换、数据预处理、推理执行和结果解析。首先利用KerasModelImport或ONNX将TensorFlow/Keras模型转为DL4J兼容格式,注意版本匹配与层兼容性;接着通过NativeImageLoader加载图像并…

    2026年9月26日 • 用户投稿
    600
  • K8s为啥要启用bridge-nf-call-iptables内核参数?用案例给你讲明白!

    使用 kubernetes 遇到最多的 70%问题都可以归于网络问题,最近发现如果内核参数: bridge-nf-call-iptables设置不当的话会影响 kubernetes 中 node 节点上的 pod 通过 clusterip 去访问同 node上的其它 pod 时会有超时现象,复盘记录…

    2026年9月26日
    100
  • 请描述Java的内存区域(运行时数据区)

    请描述Java的内存区域(运行时数据区)请描述Java的内存区域(运行时数据区)请描述Java的内存区域(运行时数据区)请描述Java的内存区域(运行时数据区)

    Java运行时数据区分为程序计数器、Java虚拟机栈、本地方法栈、Java堆和方法区,其中堆和方法区为线程共享,其余为线程私有;程序计数器记录线程执行位置,虚拟机栈管理方法调用的栈帧,本地方法栈服务Native方法,堆存放对象实例并由GC管理,方法区存储类元数据和常量池;JDK 8后方法区由元空间替…

    2026年9月26日 • 用户投稿
    100
  • DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试

    DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试

    本文将探讨名为DeepSeek的语言模型在代码生成领域的表现。针对“DeepSeek能做代码生成吗?”这一问题,我们将阐述其在编程任务上的能力,并模拟进行一次能力测试的描述,帮助读者了解DeepSeek作为编程助手的潜力及其适用场景。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量…

    2026年9月26日 • 用户投稿
    200
  • Java项目质量保障体系:静态分析、单元测试与集成测试

    Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试

    静态分析是Java质量保障的第一道防线,因其能在代码运行前发现潜在缺陷。SonarQube等工具通过集成Checkstyle、PMD等规则集,实现代码规范、安全、性能的全面扫描,及早暴露空指针、资源泄漏等问题,减少技术债。它作为“预检系统”,避免低级错误流入后续阶段,提升整体代码整洁度,为单元与集成…

    2026年9月26日 • 用户投稿
    100
  • win10系统中cortana无法工作怎么解决

    win10系统中cortana无法工作怎么解决win10系统中cortana无法工作怎么解决win10系统中cortana无法工作怎么解决win10系统中cortana无法工作怎么解决

    我们知道,在windows 10系统中内置了一个非常有趣的智能语音助手——cortana(也被亲切地称为“小娜”)。当我们想快速找到某个应用程序,却不想手动逐个查找时,只需向“小娜”发出指令,她就能迅速告诉我们应用的位置,使用起来十分便捷。然而,最近有用户反馈说在使用过程中遇到了cortana无法正…

    2026年9月26日 • 用户投稿
    300
  • sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置

    sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置

    首先确认Sublime可执行路径为/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl,接着创建软链接sudo ln -s /Applications/Sublime Text.app/Contents/SharedSuppor…

    2026年9月26日 • 用户投稿
    100
  • 检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常由编译器强制处理,代表可预期的外部问题,如文件不存在;非检查型异常为运行时异常,通常由程序逻辑错误引起,编译器不强制捕获。前者需显式处理或声明,体现健壮性设计;后者应通过预防避免,体现“快速失败”原则。自定义异常时,若调用方可恢复或需处理,应继承Exception;若为内部错误,则继承Ru…

    2026年9月26日 • 用户投稿
    100
  • synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 是 Java 中保证线程安全的核心机制,其本质是通过 JVM 内置的 Monitor(监视器)实现互斥访问。当多个线程竞争同步资源时,synchronized 依靠对象头中的 Mark Word 和锁升级机制(偏向锁 → 轻量级锁 → 重量级锁)动态调整锁的实现方式,以平衡…

    2026年9月26日 • 用户投稿
    200
  • readdir在Debian中的安全性问题

    readdir 是 linux 系统中用于列出目录内容的函数,通常在 头文件中声明。在 debian(以及大多数 linux 发行版)中,readdir 函数本身并不直接引入额外的安全风险。然而,当它与系统其他部分结合使用时,可能会受到一些潜在的安全威胁。以下是一些相关的考虑点: 动态链接器劫持和 …

    2026年9月26日
    100

发表回复

登录后才能评论
关注微信