渐进式编程课
C++ 目录
第 18 课2026.09.23

把已有课程对象中的字符串成员转交给另一个课程对象。

第 18 课:移动含字符串成员的 Lesson

  • 日期:2026-09-23
  • 课程序号:第 18 课
  • 知识点:类成员的移动语义

用途或适用场景

把已有课程对象中的字符串成员转交给另一个课程对象。

核心概念

简单的 Lesson 结构体含有 std::string 成员且没有自定义拷贝、移动或析构函数时,编译器可以生成逐成员移动操作;移动后不依赖源对象字符串的具体内容。

最小代码或操作示例

cpp
#include <iostream>
#include <string>
#include <utility>
struct Lesson { std::string title; int minutes; };
int main() {
  Lesson source{"C++", 5};
  Lesson destination{"草稿", 1};
  destination = std::move(source);
  std::cout << destination.title << " " << destination.minutes << "\n";
}

3~5 分钟练习

把源课程时长改为 10,再执行移动赋值。

参考答案

目标对象输出 C++ 10;不要断言移动后 source.title 的具体文本。

与上一课的联系

沿用第 17 课的 Lesson、source 和 destination;上一课只移动 title,本课只改为移动整个对象,观察目标的 minutes 也随之变为 5;下一课可比较拷贝与移动后两个目标对象的值。

时效校验

时效校验:2026-09-24(已重新打开 Standard C++ 的默认拷贝与移动操作说明;移动语义需 C++11+,简单结构体的逐成员移动用法未见废弃说明)。

官方参考