AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 43
在函数中传递 std::unique_ptr
C++ SELF
等级 43,
课时 0
我们来讲解在 C++ 中如何正确地把
std::unique_ptr
传递给函数:什么时候按值传参表示“我接管所有权”,并且需要
std::move(...)
;什么时候需要引用
std::unique_ptr<T>&
来管理拥有者;以及什么时候根本不需要拥有者——使用
const
T&
或
const
T*
就足够了。最后我们会给出一张速查表、一个小练习,以及所有权边界上的常见错误。
std::unique_ptr
—
get()
/
reset()
/
release()
C++ SELF
等级 43,
课时 1
解析
std::unique_ptr
的所有权边界:介绍通过
get()
的“观察”与通过
reset()
的“销毁/替换”和通过
release()
的“向外转移所有权”有何区别。结合实践查看典型陷阱:从
get()
产生的第二个所有者、
reset()
后的悬空指针、
release()
导致的泄漏和 double-free,以及如何在与“旧”API交互时安全通过边界。
std::unique_ptr 中的 custom deleter:handle、FILE*
C++ SELF
等级 43,
课时 2
我们来讲解,如何把
std::unique_ptr
变成一种通用的
RAII
包装,用于那些不是通过
delete
释放的资源:什么是 handle,如何正确让
FILE*
与
fopen
/
fclose
配合,custom deleter 的工作方式是什么(函数对象或函数指针),以及如何安全地使用
get()
、
reset()
、
release()
。最后——我们会讲到释放机制和典型错误。
std::shared_ptr
: 引用计数与开销
C++ SELF
等级 43,
课时 3
我们来讲解为什么需要
std::shared_ptr
,
reference counting
模型如何通过控制块工作,为什么拷贝会增加所有者数量(以及
use_count()
显示的含义)、对象实际上何时被销毁,以及共享拥有在内存和速度上的代价。最后 — 一个包含共享
AppContext
的实战例子并分析典型错误(
reset()
、空指针、对计数器的错误期望)。
std::make_shared — 控制块与优势
C++ SELF
等级 43,
课时 4
解析
std::make_shared
实际完成了什么:
std::shared_ptr
的控制块(
control block
)如何组织,为什么常常是“一个分配替代两个分配”,手动用
new
包裹到
shared_ptr
有哪些危险,以及典型错误如何导致
double-free
和崩溃。通过一个带有共享所有权的任务调度小例子来巩固理解。
Please enable JavaScript to continue using this application.