深入理解C++ 智能指针std::shared_ptr<一>各种构造方法
构造方式代码示例特点与说明默认构造std::shared_ptrT p;构造一个空的智能指针不管理任何资源。裸指针构造std::shared_ptrT p(new T(args));直接传入new出来的裸指针。不推荐异常不安全且容易误操作仅用于兼容旧代码。工厂构造最推荐auto p std::make_sharedT(args);单次内存分配对象控制块性能最高异常安全。日常开发首选。拷贝构造std::shared_ptrT p2(p1);共享所有权引用计数 1。移动构造std::shared_ptrT p2(std::move(p1));转移所有权引用计数不变p1变为空。从unique_ptr构造std::shared_ptrT p(std::move(uniquePtr));将独占指针转为共享指针转移所有权。自定义删除器std::shared_ptrT p(new T, deleter);释放资源时调用自定义函数如关闭文件句柄。可以参照下面示例:#include iostream #include memory // 辅助类用来观察构造和析构的日志 class MyClass { public: int id; explicit MyClass(int i) : id(i) { std::cout MyClass [ id ] 构造 std::endl; } ~MyClass() { std::cout MyClass [ id ] 析构 std::endl; } void greet() const { std::cout Hello from MyClass id std::endl; } }; int main() { std::cout 1. 默认构造空指针 std::endl; std::shared_ptrMyClass empty; // 空 if (!empty) { std::cout empty 是空指针 std::endl; } std::cout \n 2. make_shared 构造推荐 std::endl; auto sp1 std::make_sharedMyClass(10); // 只分配一次内存 std::cout sp1 引用计数: sp1.use_count() std::endl; // 1 sp1-greet(); std::cout \n 3. 拷贝构造共享所有权 std::endl; auto sp2 sp1; // 拷贝引用计数 1 std::cout 拷贝后 sp1 计数: sp1.use_count() std::endl; // 2 std::cout 拷贝后 sp2 计数: sp2.use_count() std::endl; // 2 std::cout \n 4. 移动构造转移所有权 std::endl; auto sp3 std::move(sp1); // sp1 变为空所有权给 sp3 std::cout 移动后 sp1 是否为空: (sp1 ? 否 : 是) std::endl; std::cout 移动后 sp3 计数: sp3.use_count() std::endl; // 2 (sp2 sp3) std::cout \n 5. 从裸指针构造不推荐仅演示 std::endl; std::shared_ptrMyClass sp4(new MyClass(20)); std::cout sp4 计数: sp4.use_count() std::endl; std::cout \n 6. 从 unique_ptr 转换 std::endl; auto uniquePtr std::make_uniqueMyClass(30); std::shared_ptrMyClass sp5 std::move(uniquePtr); // uniquePtr 转为 shared_ptr std::cout sp5 计数: sp5.use_count() std::endl; std::cout \n 7. 自定义删除器lambda std::endl; std::shared_ptrMyClass sp6(new MyClass(40), [](MyClass* p) { std::cout 自定义删除器: 释放 MyClass p-id std::endl; delete p; }); std::cout \n--- 主函数即将结束所有指针将自动析构 --- std::endl; // 注意sp1 已经为空sp2/sp3/sp4/sp5/sp6 会在退出作用域时自动释放内存。 return 0; }

相关新闻

用好 Python 上下文管理器:contextlib 让你少写一半 with 代码

用好 Python 上下文管理器:contextlib 让你少写一半 with 代码

用好 Python 上下文管理器:contextlib 让你少写一半 with 代码 with 语句几乎每个 Python 程序员每天都在用:打开文件、加锁、连接数据库。但很多人只停留在 with open(...) 这个层面,一旦需要自己封装资源或复用一段"进入/退出"逻…

2026/8/23 23:55:53 阅读更多 →
自动化运维-从零开始编写ansible剧本(二)

自动化运维-从零开始编写ansible剧本(二)

前言 前述文章自动化运维-ansible常用模块详解已经详细介绍过ansible 常用模块的Ad-hoc命令实现方式,适合执行 临时性、简单的任务;而使用较多的方式是通过ansible playbook实现多任务执行,无需重复多次输入命令。 本篇文章将通过剧本的方式…

2026/8/23 23:55:53 阅读更多 →
GEO常见误区:以逸阳女裤为例看做了内容不等于被AI引用

GEO常见误区:以逸阳女裤为例看做了内容不等于被AI引用

核心摘要 服装品牌做GEO,最容易踩的坑是“以为发了文章就完事”。逸阳女裤作为可溯源案例,恰好能说明哪些做法有效、哪些只是自我安慰。本文列四个常见误区,帮服装老板少走弯路。河南新流量文化传播有限公司的GEO系统,是一套覆盖…

2026/8/23 23:54:52 阅读更多 →

最新新闻

论文AI率过高怎么办?2026年12款免费降AI率工具实测指南

论文AI率过高怎么办?2026年12款免费降AI率工具实测指南

现在毕业论文答辩前,“AI率超标”已经彻底取代“查重率过高”,成了同学们的头号难题!不少同学只是用AI润色了摘要和结论,AI率直接飙升到离谱,纯手动修改根本不管用——这说明AIGC检测系统抓的不是个别词语,…

2026/8/23 23:59:54 阅读更多 →
Marketch:从Sketch画板直接量取CSS

Marketch:从Sketch画板直接量取CSS

Marketch:从Sketch画板直接量取CSS 【免费下载链接】marketch Marketch is a Sketch 3 plug-in for automatically generating html page that can measure and get CSS styles on it. 项目地址: https://gitcode.com/gh_mirrors/ma/marketch 设计稿交付还在…

2026/8/23 23:59:54 阅读更多 →
如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南 【免费下载链接】ThinkpadX390-Opencore-EFI macOS Catalina & Big Sur & Monterey on ThinkPad X390 (Hackintosh) 项目地址: https://gitcode.com/gh_mirrors/th/ThinkpadX390-Opencore-EFI …

2026/8/23 23:59:54 阅读更多 →
WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化 【免费下载链接】WechatHook Enjoy hooking wechat by Xposed....Accessibility...and so on... 项目地址: https://gitcode.com/gh_mirrors/we/WechatHook WechatHook 是一个基于 Xpos…

2026/8/23 23:59:54 阅读更多 →
OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan 是一款开源免…

2026/8/23 23:59:54 阅读更多 →
Gin-JWT认证与授权方案从Token到RBAC权限控制

Gin-JWT认证与授权方案从Token到RBAC权限控制

Gin-JWT认证与授权方案从Token到RBAC权限控制 文章导语 JWT(JSON Web Token)是现代Web服务的身份认证标准。在Gin框架中集成JWT看似简单,但涉及Token刷新、黑名单、多设备登录、RBAC权限控制等实际需求时,就需要更完善的设计。本文…

2026/8/23 23:57:54 阅读更多 →

日新闻

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →