[C++11/内存管理] 彻底终结 async 回调 this 悬空与 Double-Free 物理崩溃:std::enable_shared_from_this 与 shared_from_this
导读摘要在现代 C 高并发网络框架如 LanBus 数据网关与实时音视频处理终端如 STTOSView 音频帧调度中将对象自身投递给异步线程或回调函数时开发者常陷于“裸this传递引发 Use-After-Free 悬空”与“直接用shared_ptr(this)触发控制块分裂导致 Double-Free 物理崩溃”的硬核矛盾中。本文深度解构 C11 引入的std::enable_shared_from_thisT与shared_from_this()的微观原理剖析其基于 CRTP奇异递归模板模式与 STL 幕后 SFINAE 静默插桩的 0 额外控制块共享机制并结合工厂模式给出现代 C 异步生命周期安全的工业级防御方案。文章目录1. 痛点场景当异步回调遇上 this 裸指针1.1 灾难一传递裸指针 this 引发 Use-After-Free 内存悬空1.2 灾难二直接构造 std::shared_ptrT(this) 导致控制块分裂与 Double-Free2. 破局之道std::enable_shared_from_this 的微观解构2.1 CRTP 奇异递归模板模式与内部插桩2.2 微观图解std::make_shared 初始化时的幕后契约幕后黑魔法SFINAE 静态检测辅助函数3. 现代化工程实践对比与标准代码模板4. 深度扩展四大工业级致命陷阱与避坑指南陷阱一在栈对象或未被 shared_ptr 管理的对象上调用 shared_from_this()陷阱二在构造函数或析构函数内部调用 shared_from_this()陷阱三非 public 继承 enable_shared_from_this陷阱四多重继承与菱形继承引发的类型二义性5. C17/20 现代化演进与多线程并发集成5.1 C17 weak_from_this() 的性能优势5.2 C20 std::atomicstd::shared_ptrT 与 shared_from_this() 结合6. 总结与长尾知识推荐 资深 C 专家一句话口诀️ 核心长尾 SEO 关键词布局1. 痛点场景当异步回调遇上this裸指针在构建分布式 RPC 框架、异步网络网关如基于 Epoll/Asio 的 Session 管理器或者多线程事件总线时我们经常需要在类的内部成员函数中启动一个异步任务并将当前对象this传递给异步闭包。然而在这个看似简单的“自引用”场景下隐藏着两个导致服务在生产环境随时物理崩溃的毁灭性暗礁。1.1 灾难一传递裸指针this引发 Use-After-Free 内存悬空最直观的做法是在 Lambda 闭包中直接捕获this裸指针classNetworkSession{public:voidasync_receive(){// ❌ 极度危险异步闭包捕获了裸指针 thisstd::thread([this](){std::this_thread::sleep_for(std::chrono::milliseconds(100));// 若此时外部主线程已经 delete 了 this 对象此处解引用直接爆出 Segfault/UAF 崩溃this-parse_packet();}).detach();}voidparse_packet(){/* 业务逻辑 */}};[!CAUTION]物理崩溃机理外部主线程控制着NetworkSession的生命周期若在异步 I/O 阻塞期间外部主线程重置了句柄或析构了该对象异步线程被唤醒后继续通过this访问成员变量属于典型的Use-After-Free野指针解引用未定义行为1.2 灾难二直接构造std::shared_ptrT(this)导致控制块分裂与 Double-Free为了解决悬空问题很多开发者顺理成章地想到“用std::shared_ptr将this包裹起来传给异步线程不就能延长生命周期了吗”于是写出了如下代码classNetworkSession{public:voidasync_receive_flawed(){// ❌ 毁灭性灾难直接在成员函数内部用 this 构造 shared_ptrstd::shared_ptrNetworkSessionself(this);std::thread([self](){self-parse_packet();}).detach();}};这段代码一旦运行系统将在几毫秒内直接崩溃并抛出操作系统级错误double free or corruption (fasttop)。为什么会这样为了理解根本原因我们需要观察std::shared_ptr在物理内存中的真实布局【外部 shared_ptrNetworkSession】 │ ├── [ 指向堆上 NetworkSession 对象 (this) ] └── [ 控制块 #1 (Control Block A) ] ─── 引用计数 ref_count 1 -------------------------------------------------------------- 【成员函数内 shared_ptrNetworkSession self(this)】 │ ├── [ 指向同一个堆上 NetworkSession 对象 (this) ] └── [ 控制块 #2 (Control Block B) ] ─── 引用计数 ref_count 1 -- 控制块分裂[!IMPORTANT]控制块分裂Control Block Splitting原理std::shared_ptr的核心是其关联的控制块Control Block控制块中维护着强引用计数use_count和弱引用计数weak_count。当你调用std::shared_ptrT(this)时shared_ptr并不知道外部是否已经存在管理该对象的控制块它只会在堆上重新分配一个新的控制块 #2此时有两个独立的控制块在同时监管同一个物理地址。当self出了作用域析构时控制块 #2 引用计数清零调用delete this释放内存当外部shared_ptr析构时控制块 #1 引用计数清零再次调用delete this——同一块物理内存被释放两次Double-Free引发崩溃2. 破局之道std::enable_shared_from_this的微观解构为了在不额外创建新控制块的前提下安全地在类内部获取指向当前对象且共享已有控制块的std::shared_ptrC11 标准库在memory中正式引入了std::enable_shared_from_thisT。2.1 CRTP 奇异递归模板模式与内部插桩std::enable_shared_from_thisT采用了 C 经典的CRTPCuriously Recurring Template Pattern奇异递归模板模式。当你的类Session公有继承自std::enable_shared_from_thisSession时STL 源码层面的物理骨架大致如下templatetypenameTclassenable_shared_from_this{private:// 幕后插桩一个私有/保护的 weak_ptr 观察者mutablestd::weak_ptrT__weak_this;protected:constexprenable_shared_from_this()noexcept:__weak_this(){}enable_shared_from_this(constenable_shared_from_this)noexcept:__weak_this(){}enable_shared_from_thisoperator(constenable_shared_from_this)noexcept{return*this;}~enable_shared_from_this()default;public:// 安全提取强引用复用 __weak_this 指向的已有控制块std::shared_ptrTshared_from_this(){returnstd::shared_ptrT(__weak_this);}std::shared_ptrconstTshared_from_this()const{returnstd::shared_ptrconstT(__weak_this);}// C17 补齐的弱引用提取接口std::weak_ptrTweak_from_this()noexcept{return__weak_this;}std::weak_ptrconstTweak_from_this()constnoexcept{return__weak_this;}};关键点在于每个继承该类的对象内部都隐式多出了一个mutable std::weak_ptrT __weak_this成员变量2.2 微观图解std::make_shared初始化时的幕后契约那么这个内部的__weak_this是在何时、以何种方式获得真实的堆控制块地址的呢让我们追踪其微观流转全过程物理控制块 (Control Block)Session 对象 (继承 enable_shared_from_this)std::make_shared / std::shared_ptr业务调用方物理控制块 (Control Block)Session 对象 (继承 enable_shared_from_this)std::make_shared / std::shared_ptr业务调用方后续 Session 内部调用 shared_from_this()直接基于 __weak_this 升级为 shared_ptr共享同一控制块调用 std::make_sharedSession()1在堆上就地构造 Session 对象 (此阶段 __weak_this 仍为空)2创建唯一的物理控制块 (ref_count 1, weak_count 1)3【关键 SFINAE 激活】检测到继承 enable_shared_from_this4将控制块与地址隐式赋值给 Obj.__weak_this5返回外部 shared_ptrSession 实例6幕后黑魔法SFINAE 静态检测辅助函数在 GCC libstdc 或 Clang libc 的实现中std::shared_ptr的构造函数内部包含类似下面的静态分发逻辑__enable_shared_from_this_helper// 伪代码STL 内部 SFINAE 检测与插桩templatetypenameY,typenameTvoid__enable_shared_from_this_helper(conststd::shared_ptrY__pn,conststd::enable_shared_from_thisT*__pe){if(__pe!nullptr){// 秘密将当前 shared_ptr 的控制块赋予对象内部的 __weak_this__pe-__weak_this__pn;}}// 若对象未继承 enable_shared_from_this命中该重载不做任何操作void__enable_shared_from_this_helper(...){}这种设计极为优雅只有当对象第一次被真正的std::shared_ptr接管时内部的__weak_this契约才会被静默激活。3. 现代化工程实践对比与标准代码模板下面我们通过一个完整的可编译示例展示如何在现代 C 异步网络编程中用好std::enable_shared_from_this。#includeiostream#includememory#includethread#includechrono#includefunctional// 【现代 C 专家级模式】// 1. 公有继承 enable_shared_from_thisSession// 2. 将构造函数私有化结合静态工厂函数 create() 强制外部必须用 shared_ptr 管理classSecureSession:publicstd::enable_shared_from_thisSecureSession{private:std::string session_id_;// 私有化构造函数封印外部直接在栈上或用 raw delete 构造的可能explicitSecureSession(std::string id):session_id_(std::move(id)){std::clog[Session session_id_] 物理构造完毕.\n;}public:~SecureSession(){std::clog[Session session_id_] 物理析构释放.\n;}// 静态工厂函数从编译期层面确保对象必定由 shared_ptr 接管templatetypename...Argsstaticstd::shared_ptrSecureSessioncreate(Args...args){// 注由于构造函数是 privatemake_shared 需要友元此处简单使用 new 演示structEnableMakeShared:publicSecureSession{explicitEnableMakeShared(Args...a):SecureSession(std::forwardArgs(a)...){}};returnstd::make_sharedEnableMakeShared(std::forwardArgs(args)...);}// 核心异步业务逻辑voidasync_process_payload(){// -------------------------------------------------------------// 【核心操作】调用 shared_from_this() 提取安全的强引用// 0 额外控制块开销引用计数 safe 1// -------------------------------------------------------------autoselfshared_from_this();std::thread([self,this](){std::clog[Async Thread] 开始处理任务, session_id: session_id_...\n;std::this_thread::sleep_for(std::chrono::milliseconds(50));// 即使外部主线程重置了指针self 依然强行拉长 Session 生命期std::clog[Async Thread] 任务完成, ref_count self.use_count()\n;}).detach();}// C17 weak_from_this 实战防强引用循环voidregister_to_event_loop(){std::weak_ptrSecureSessionweak_selfweak_from_this();// 将 weak_self 投递给订阅中心事件触发时进行 lock 探查若对象已注销则无缝跳过std::thread([weak_self](){std::this_thread::sleep_for(std::chrono::milliseconds(100));if(autostrong_selfweak_self.lock()){std::clog[Event Loop] 对象依然存活安全触发回调\n;}else{std::clog[Event Loop] 对象已被析构静默丢弃通知。\n;}}).detach();}};intmain(){std::clog 启动 SecureSession 异步生命周期测试 \n;{// 1. 通过工厂创建实例内部 __weak_this 被初始化autosessionSecureSession::create(SESSION_GW_009);// 2. 发起异步任务内部将 self 绑定到闭包session-async_process_payload();session-register_to_event_loop();std::clog[Main] 外部准备重置 session 指针...\n;session.reset();// 外部引用计数 -1但异步线程绑定的 self 保证对象安全存活std::clog[Main] 外部 session 指针已被 reset()。\n;}// 等待异步子线程执行完毕std::this_thread::sleep_for(std::chrono::milliseconds(150));std::clog 测试结束 \n;return0;}4. 深度扩展四大工业级致命陷阱与避坑指南即使继承了std::enable_shared_from_this在复杂的生产代码中稍有不慎依然会引发崩溃。资深 C 专家必须时刻警惕以下四大杀手陷阱陷阱一在栈对象或未被shared_ptr管理的对象上调用shared_from_this()voidbad_stack_usage(){// ❌ 极度危险直接在栈上创建对象SecureSessionsession_on_stack(STACK_01);// 暴雷此时没有 shared_ptr 接管内部 __weak_this 是个空的 expired 状态// 强行调用 shared_from_this() 会瞬间抛出 std::bad_weak_ptr 异常autoptrsession_on_stack.shared_from_this();// throws std::bad_weak_ptr}[!WARNING]std::bad_weak_ptr异常机制当shared_from_this()被调用时底层尝试从未被赋值激活的__weak_this构造shared_ptr。根据 C11 标准要求当weak_ptr为空时从其构造shared_ptr必须抛出std::bad_weak_ptr异常。防御方案采用前文推荐的私有构造函数 静态工厂函数 (create())模式在编译期彻底禁止外部在栈上new或直接声明该对象。陷阱二在构造函数或析构函数内部调用shared_from_this()classFlawedSession:publicstd::enable_shared_from_thisFlawedSession{public:FlawedSession(){// ❌ 毁灭性错误在构造函数内部调用 shared_from_this()// 原因此时构造函数还没执行完外部的 shared_ptr 根本还没来得及执行 SFINAE 契约插桩autoselfshared_from_this();// 必然抛出 std::bad_weak_ptr}};[!TIP]二段式初始化Two-Phase Initialization法则永远不要在构造函数或析构函数中调用shared_from_this()。若需要初始化时向全局服务注册自身请显式提供init()成员函数或者在静态工厂函数中完成注册templatetypename...Argsstaticstd::shared_ptrSecureSessioncreate(Args...args){autoptrstd::make_sharedSecureSession(...);ptr-init();// 在对象成功绑定 shared_ptr 后再调用初始化returnptr;}陷阱三非public继承enable_shared_from_this// ❌ 错误默认为 private 继承或显式写了 private/protected 继承classPrivateSession:std::enable_shared_from_thisPrivateSession{public:voiddo_something(){autoselfshared_from_this();}};[!IMPORTANT]原理分析STL 中的 SFINAE 检测函数__enable_shared_from_this_helper需要将派生类指针隐式转换为enable_shared_from_this*基类指针。如果继承权限不是public转换会在编译期被阻止STL 会默默放弃插桩导致__weak_this为空运行时调用shared_from_this()依然抛出std::bad_weak_ptr。陷阱四多重继承与菱形继承引发的类型二义性在复杂的大型软件架构中若一个类同时继承了两个基类而这两个基类各自public继承了enable_shared_from_thisclassBaseA:publicstd::enable_shared_from_thisBaseA{};classBaseB:publicstd::enable_shared_from_thisBaseB{};// ❌ 二义性黑洞Derived 内部包含了两个独立的 __weak_thisclassDerived:publicBaseA,publicBaseB{};这会导致编译器报错ambiguous conversion to enable_shared_from_this。[!CAUTION]解决方案避免在多个平行基类中分别继承enable_shared_from_this。应当统一在最顶层的共同基类或派生类自身中继承一次或者通过虚继承public virtual std::enable_shared_from_thisRootClass消灭多余副本。5. C17/20 现代化演进与多线程并发集成5.1 C17weak_from_this()的性能优势在 C17 之前如果我们只需要在内部获取指向自己的弱引用传递给观察者不得不写出std::weak_ptrSessionweak_selfshared_from_this();// 额外经历了 shared_ptr 的原子计数 1 然后 -1 开销C17 标准正式补齐了weak_from_this()接口直接返回内部的__weak_this的拷贝std::weak_ptrSessionweak_selfweak_from_this();// 0 强引用原子修改开销极速5.2 C20std::atomicstd::shared_ptrT与shared_from_this()结合在 C20 中无锁智能指针std::atomicstd::shared_ptrT正式成为一等公民。结合shared_from_this()我们可以在高并发无锁网关中实现高频会话的无锁替换与无缝热插拔#includeatomic#includememoryclassAtomicGatewaySession:publicstd::enable_shared_from_thisAtomicGatewaySession{public:voidpublish_self_atomically(std::atomicstd::shared_ptrAtomicGatewaySessionglobal_slot){// 原子替换全局槽位中的 Session 指针彻底无锁化global_slot.store(shared_from_this(),std::memory_order_release);}};6. 总结与长尾知识推荐 资深 C 专家一句话口诀std::enable_shared_from_this的微观精髓是 CRTP 继承与__weak_this静默插桩配合“私有构造 静态工厂”组合拳可在 0 额外控制块开销下彻底消灭this野指针与 Double-Free 崩溃️ 核心长尾 SEO 关键词布局std::enable_shared_from_this|shared_from_this|weak_from_this|std::bad_weak_ptr| C 智能指针控制块 | Double-Free 崩溃 | Use-After-Free | CRTP 奇异递归模板模式 | C11 异步回调对象生命周期 | 工厂模式make_shared| SFINAE 智能指针插桩

相关新闻

技术指南:如何安全导出浏览器Cookie实现命令行工具集成

技术指南:如何安全导出浏览器Cookie实现命令行工具集成

技术指南:如何安全导出浏览器Cookie实现命令行工具集成 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在开发自动化脚本、进行Web爬虫…

2026/8/3 0:11:54 阅读更多 →
AI工具不会用?零基础劳动者速成清单,90%的人漏掉了第3步

AI工具不会用?零基础劳动者速成清单,90%的人漏掉了第3步

更多请点击: https://intelliparadigm.com 第一章:AI劳动技能学习的认知重构 当AI系统开始承担代码审查、需求分析、测试用例生成等传统由人类工程师完成的任务时,劳动技能的内涵正经历一场静默而深刻的范式迁移。技能不再仅指向“如何操作工…

2026/8/3 0:10:53 阅读更多 →
【单片机毕业设计推荐】基于 STM32 的智能水杯监测与提醒系统设计与实现,基于 STM32 的水温水位智能采集与蓝牙监控装置设计(011805)

【单片机毕业设计推荐】基于 STM32 的智能水杯监测与提醒系统设计与实现,基于 STM32 的水温水位智能采集与蓝牙监控装置设计(011805)

文章目录 20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能技术路线项目演示关于我们项目案例源码获取 温馨提示:本人主页置顶文章(点我)有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)有 CSDN 平台…

2026/8/3 0:10:53 阅读更多 →

最新新闻

别让Java基础数据类型坑了你!面试82%必考,搞不懂迟早翻车

别让Java基础数据类型坑了你!面试82%必考,搞不懂迟早翻车

于Java技术体系这事里,数据类型是搭建全部程序的基础单元, 而其中“基本数据类型跟引用数据类型的差异”更是互联网公司Java面试时的高频核心考点, 依据CSDN《2024 Java面试趋势报告》的情况来说, 该知识点在初级到中级开发者面试里, 考查率高达82%, 并且还经常结合…

2026/8/3 0:50:13 阅读更多 →
生产级代码重构该用 Cursor Composer 还是 Agent 模式?基于真实项目的架构...

生产级代码重构该用 Cursor Composer 还是 Agent 模式?基于真实项目的架构...

生产级代码重构该用 Cursor Composer 还是 Agent 模式?基于真实项目的架构选型与落地实录上周接到一个紧急需求:将存量 Spring Boot 2.7 单体应用的领域模型层整体升级为 DDD 分层结构。代码库包含 47 个核心模块、约 12 万行 Java 代码,涉及…

2026/8/3 0:49:13 阅读更多 →
终极Windows热键冲突检测指南:如何快速定位并解决快捷键占用问题

终极Windows热键冲突检测指南:如何快速定位并解决快捷键占用问题

终极Windows热键冲突检测指南:如何快速定位并解决快捷键占用问题 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective …

2026/8/3 0:49:13 阅读更多 →
终极指南:3步免费解锁Wand游戏修改器完整功能

终极指南:3步免费解锁Wand游戏修改器完整功能

终极指南:3步免费解锁Wand游戏修改器完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款开源增强工具&#x…

2026/8/3 0:49:13 阅读更多 →
Tacview飞行数据分析工具:专业飞行训练的终极解决方案

Tacview飞行数据分析工具:专业飞行训练的终极解决方案

Tacview飞行数据分析工具:专业飞行训练的终极解决方案 【免费下载链接】Tacview The Universal Flight Analysis Tool 项目地址: https://gitcode.com/gh_mirrors/ta/Tacview Tacview是一款功能强大的通用飞行数据分析工具,专为飞行模拟爱好者和专…

2026/8/3 0:48:12 阅读更多 →
【单片机毕业设计推荐】基于 STM32 的环境温湿度与水位智能监测控制系统设计与实现 基于 STM32 的带蓝牙 APP 的智能加湿补水监控系统设计(011605)

【单片机毕业设计推荐】基于 STM32 的环境温湿度与水位智能监测控制系统设计与实现 基于 STM32 的带蓝牙 APP 的智能加湿补水监控系统设计(011605)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能技术路线项目演示关于我们项目案例源码获取温馨提示:本人主页置顶文章(点我)有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)有 CSDN 平台官…

2026/8/3 0:48:12 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/2 2:47:48 阅读更多 →
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/2 0:23:22 阅读更多 →