AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 38
Storage duration 在 C++ 中 — automatic / static / dynamic
C++ SELF
等级 38,
课时 0
解析 C++ 中对象“存在多长时间”的概念,使用
storage duration
的术语:
automatic
(直到最近的
}
)、
static
(几乎整个程序期间)和
dynamic
(由像
std::vector
和
std::string
这样的容器管理的内存)。另外区分
scope
和
lifetime
,查看通过
static
的调用计数器例子、
std::vector
的增长示例,并在一个小型应用
TaskBook
中巩固所有内容。
栈:局部变量的生命周期与离开 scope
C++ SELF
等级 38,
课时 1
我们来解析在 C++ 中调用栈如何保存函数上下文:什么是栈帧,为什么局部的
automatic
对象恰好在它们的
scope
范围内存活,
return
与
}
导致的销毁如何工作,为什么有时添加额外的块
{}
有用,以及为什么深递归受限于栈大小。最后 — 备忘与典型错误解析。
Heap——非常有意思
C++ SELF
等级 38,
课时 2
我们来分析:为什么程序需要动态内存(在教学模型中称为“堆”),为什么栈不适合存放可变大小的数据,以及在 C++ 中如何通过拥有所有权的容器
std::vector
和
std::string
正确地“无痛使用动态内存”。我们将以迷你应用
TaskBox
为例,讨论
size()
/
capacity()
、
reserve()
的意义、重新分配的代价,以及典型错误(例如把
reserve
和
resize
搞混)。
Lifetime 与析构函数:析构何时被调用
C++ SELF
等级 38,
课时 3
我们讲解 C++ 中对象的生存期和析构函数的自动调用:
scope
与
lifetime
有何区别,为什么析构函数
~Type()
在块边界被调用,
return
时如何进行销毁,为什么对象按声明的相反顺序被销毁,结构体字段和容器元素(
std::vector
、
std::string
)会发生什么,以及如何使用“scope 退出日志器”进行调试。
内存地址:运算符
&
C++ SELF
等级 38,
课时 4
解析 C++ 中的 address-of 运算符
&
:
x
和
&
x
有何不同,为什么地址也是一种值,如何打印和比较地址,复合对象(
struct
与字段)如何寻址,以及新手常犯的错误(生命周期、将地址当作 ID 使用、对临时对象取地址)。为指针主题
T
*
和引用
T
&
做准备。
Please enable JavaScript to continue using this application.