第 19 课2026.09.24
需要决定后续是否还要使用源课程时,通过同一对象对照拷贝与移动的结果。
第 19 课:比较 Lesson 的拷贝与移动目标
- 日期:2026-09-24
- 课程序号:第 19 课
- 知识点:简单结构体的默认拷贝与移动结果对照
用途或适用场景
需要决定后续是否还要使用源课程时,通过同一对象对照拷贝与移动的结果。
核心概念
没有自定义拷贝、移动或析构函数的 Lesson 可由编译器生成相应操作;拷贝后仍可依赖源对象的值,移动后不要依赖源标题的具体内容。
最小代码或操作示例
cpp
#include <iostream>
#include <string>
#include <utility>
struct Lesson { std::string title; int minutes; };
int main() {
Lesson source{"C++", 5};
Lesson copied = source;
Lesson moved = std::move(source);
std::cout << copied.title << " " << moved.title << '\n'; // C++ C++
}3~5 分钟练习
在移动前输出 source.title,再运行程序;不要在移动后断言源标题的文本。
参考答案
在 Lesson moved = ... 前加入 std::cout << source.title << '\n';,会输出 C++;移动后只检查 copied 与 moved 的目标值。
与上一课的联系
沿用第 18 课含字符串成员的 Lesson 和 std::move;本课只增加同一源对象先拷贝、再移动的对照,明确何时还能依赖源值;下一课可把已移动的目标课程放入课程列表。
时效校验
时效校验:2026-09-24(已打开 Standard C++ 的默认拷贝与移动操作说明,并核对 std::move 的 C++11 语义;未见本课写法的废弃标记)。