AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 41
Nullable API: 指针、std::optional 与 sentinel 值
C++ SELF
等级 41,
课时 0
我们来分析在 C++ 中表达“值可能不存在”的三种方式:返回指针
T*
并检查
nullptr
,返回
std::optional<T>
并处理
std::nullopt
,或者使用诸如
std::string::npos
之类的 sentinel 值。学习如何根据语义选择方法(“访问对象” vs “值-结果”),进行小规模 API 重构,并修复典型错误。
std::vector 中的失效:reallocation、erase
C++ SELF
等级 41,
课时 1
我们来解析在
std::vector
中引用/指针/迭代器的失效是什么,为什么容器在增长时会“搬家”(
reallocation
),为什么通过
erase
删除会移动元素并破坏旧地址,为什么
const
并不能保证安全,以及如何用一张“风险地图”来思考各操作(
push_back
,
reserve
,
resize
,
erase
),以免踩到
UB
。
避免在容器元素上保存指针
C++ SELF
等级 41,
课时 2
讨论一个 C++ 的实际问题:为什么在长期状态下保存指向
std::vector
元素的指针/引用是危险的(由于
reallocation
或在
erase
之后的移动会导致失效)、这如何导致
UB
,以及用什么来替代这种“指向元素的引用”——用索引(
std::optional<std::size_t>
)或稳定的标识符(
id
),并在需要时重新获取访问权。
new/delete 和 new[]/delete[]:不匹配导致的 UB
C++ SELF
等级 41,
课时 3
解析在 C++ 中
new
/
delete
与
new
[]
/
delete
[]
的真实工作方式:分配内存和构造对象时执行了哪些步骤,为什么
new
int
与
new
int
{}
的初始化不同,为什么
delete
会结束对象的生命周期,以及最重要的——为什么混用删除形式会产生
UB
。
手动内存错误 — leak / use-after-free / double-free
C++ SELF
等级 41,
课时 4
解析 C++ 中三种经典的手动内存管理故障:
leak
、
double-free
和
use-after-free
。确认
new
/
delete
及
new
[]
/
delete
[]
的“黄金不变式”,查看典型场景(提前
return
、指针覆盖、别名),然后通过一个包含 legacy 注释的
char*
小案例,观察隐式所有权如何导致
UB
。
Please enable JavaScript to continue using this application.