AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 47
string_view
‑陷阱:深入生命周期规则
C++ SELF
等级 47,
课时 0
我们解析为什么
std::string_view
是对他人内存的“视图”(地址 + 长度),而不是字符串,以及由此产生的典型生命周期错误:从临时
std::string
构造的 view、对
substr()
结果的 view、函数返回
string_view
、在模型字段中保存 view 以及在原始字符串被修改后使用 view。最后汇总安全风格:接受
std::string_view
作为参数,但在模型中保存
std::string
,并给出决策检查表/流程。
std::span 与 std::vector:重分配
C++ SELF
等级 47,
课时 1
我们解析为什么
std::span
是一个不拥有内存的
视图
,以及普通的
std::vector
增长(通过
push_back
/
emplace_back
)如何可能导致
reallocation
,改变
data()
的地址并将旧的
span
变成悬垂(从而导致
UB
)。展示常见坑:重分配时的失效、“过时”的大小、通过
pop_back
/
erase
导致元素被销毁,以及给出安全风格:把
span
作为函数参数,而不是长期保存状态。
生命周期安全规则:owner 与 view
C++ SELF
等级 47,
课时 2
解析实用的
owner
/
view
模型在 C++ 中的应用:为什么
std::string_view
、
std::span
、指针和引用不拥有数据、悬垂引用(dangling)与
UB
如何产生、两个保护生命周期的规则是什么(owner 比 view 活得更久,以及不要将 view 存为字段而没有保证),以及如何以小项目 TaskTracker 为例设计 API(value、
const
&
、view)。
作为 triage 一部分的性能小惯例
C++ SELF
等级 47,
课时 3
我们讲解在内存错误调查中作为稳定实验手段的 C++ 性能“微观卫生”:为什么多余的拷贝和移动会干扰可复现性,
std::vector
在
push_back
与
reallocation
时如何表现,
reserve
与
resize
有何不同,以及“诚实的签名”(按
const
&
传递、使用
std::string_view
、
std::span
等)如何减少 sanitizer 报告中的噪声并帮助更快定位根本原因。
Bug 排查检查清单
C++ SELF
等级 47,
课时 4
C++ 中 bug 排查的实用路线:如何把“偶尔崩溃”变成可确定复现的 repro,如何把场景最小化为 MRE,如何记录排查产物,并通过
assert
和
self_check()
建立回归屏障。我们以
std::vector
、悬空指针(
Task
*
)以及
push_back
时的内存搬迁为例,展示如何以工程化、可验证的方式思考。
Please enable JavaScript to continue using this application.