AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 44
所有权环 — 如何出现“无需 delete” 的泄露
C++ SELF
等级 44,
课时 0
我们讲解为什么即便使用
std::shared_ptr
也可能发生内存泄露而没有任何一个
delete
:所有权环如何形成、为什么引用计数不会降到
0
、如何通过析构函数诊断问题,以及为什么用手动
reset()
去“修复”是危险的权宜之计。以
Task
↔
Column
的示例引出非拥有引用和
std::weak_ptr
的作用。
std::weak_ptr — 观察者与打破循环引用
C++ SELF
等级 44,
课时 1
我们来解析在 C++ 中为什么需要
std::weak_ptr
:如何保存“用于导航的引用”而不拥有对象、为什么由
std::shared_ptr
组成的循环会导致内存泄漏、如何通过
lock()
安全地访问对象,以及如何基于
Project
–
Task
模型来设计“拥有/观察”关系。
选择规则:默认使用 unique_ptr,必要时使用 shared_ptr
C++ SELF
等级 44,
课时 2
讲解 C++ 中的所有权实践规则:为什么默认应选择
std::unique_ptr
,在哪些情况下通过
std::shared_ptr
的共享所有权才真正合理,为什么需要
std::weak_ptr
来打破循环,以及如何通过 API 中的类型直接“读取”引用的角色(拥有者/共同拥有者/观察者)。最后 — 一张选择表、一个简易流程图和常见错误。
编译器会生成哪些特殊成员函数以及何时生成
C++ SELF
等级 44,
课时 3
我们来分析编译器在什么情况下会自动生成哪些
special member functions
:默认构造函数
T()
、析构函数
~T()
、拷贝构造函数
T(const T&)
和拷贝赋值
operator=
。另外讨论为什么操作可能会被
implicitly deleted
(例如因为包含字段
std::unique_ptr
)以及这如何与资源所有权模型相关。
Rule of Zero — 设计不管理资源的类型
C++ SELF
等级 44,
课时 4
解析
Rule of Zero
的实用含义:如何设计“类似值(value-like)”的类型而不编写自定义析构函数和拷贝逻辑,而是依赖于像
std::string
和
std::vector
这样的 RAII 字段。讨论为什么通过
*
(
T*
) 持有所有权以及手动使用
new
/
delete
常常导致错误,以及如何通过
std::unique_ptr
和
std::shared_ptr
表达清晰的所有权语义。
Please enable JavaScript to continue using this application.