渐进式编程课
C++ 目录
第 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 语义;未见本课写法的废弃标记)。

官方参考