AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 45
=default — 将操作作为 API 的一部分生成
C++ SELF
等级 45,
课时 0
我们来解析为什么在 C++ 中要显式写出
=
default
:如何在添加了用户定义构造函数后“恢复”默认构造函数,如何将复制/赋值作为类型契约的明确部分,为什么空函数体
{}
并不等同于默认生成,以及在何处更适合放置 default 定义(在类型内部还是在
.cpp
中),以小型示例应用
TaskBox
说明。
`=delete` — 通过禁止复制来保护设计
C++ SELF
等级 45,
课时 1
我们来解析
=
delete
与操作符
delete
有何不同,删除函数如何保护类型接口,为什么要禁止默认构造函数,如何通过删除拷贝构造函数和
operator=
正确实现
non-copyable
类型,以及如何通过删除不希望的重载来管理 API。最后 — mermaid 图示决策流程并分析常见错误。
不可复制类型:unique ownership、类似 mutex 的排他场景
C++ SELF
等级 45,
课时 2
我们来分析为什么禁止复制是 C++ 类型契约的一部分:通过
std::unique_ptr
实现的唯一所有权,使用
std::ofstream
等系统句柄的所有权案例,以及类似
mutex
对象的“排他性”。学习如何设计诚实的签名(读取用
const
T
&
,修改用
T
&
),理解关于
=
delete
的错误,并通过“应用上下文”划定所有权边界。
Rule of Five:比 Rule of Zero 更好?
C++ SELF
等级 45,
课时 3
分析一个实用原因:为什么在 C++ 中“一个析构函数”经常会触发多米诺效应:默认拷贝会拷贝资源的“句柄”(例如
T
*
),从而导致
double-free
。说明何时会出现
Rule of Five
,哪五个特殊函数对此负责(拷贝/移动),以及为什么在现代 C++ 中更常见的是带有 RAII 成员的
Rule of Zero
(例如
std
::
vector
,
std
::
string
,
std
::
unique_ptr
)或通过
=
delete
诚实地禁止拷贝。
Move 构造函数与 move 赋值运算符
C++ SELF
等级 45,
课时 4
我们来解析为什么 C++ 需要 move 语义、资源所有权的迁移(而不是数据复制)如何工作、rvalue 引用
T&&
的含义、为什么
std::move
本身并不“移动任何东西”,只是允许移动,以及如何为手动管理内存的类型正确编写
move‑ctor
和
move‑assign
(以拥有
Buffer
的示例,使用
new
[]
/
delete
[]
)。最后 — moved‑from 状态的契约、copy vs move 的比较以及常见错误(内存泄漏、double‑free、移动后使用对象)。
Please enable JavaScript to continue using this application.