题目中所使用的类

目录

题目中所使用的类#

为了提高可读性, 部分地方采用了 C++20 的语法进行初始化, 见下文.

1ctor:        非拷贝构造时输出的字符
2copy_ctor:   拷贝构造时输出的字符
3copy_assign: 拷贝赋值时输出的字符
4dtor:        析构时输出的字符

class Printer#

在非拷贝构造, 被用于拷贝构造, 被用于拷贝赋值, 析构时输出对应的字符串.

例如,

构造析构#
int main() {
  // 构造时输出 "0", 被用于拷贝构造时输出 "1", 被用于拷贝赋值时输出 "2", 析构时输出 "3", 其余情况不输出
  Printer c1{Info{.ctor = "0", .copy_ctor = "1", .copy_assign = "2", .dtor = "3"}};

  // 构造时输出 "4", 析构时输出 "5", 其余情况不输出
  Printer c2{Info{.ctor = "4", .dtor = "5"}};
}
// 最终输出
// 0: c1 构造
// 4: c2 构造
// 5: c2 析构
// 3: c1 析构
拷贝构造#
int main() {
  // 构造时输出 "0", 被用于拷贝构造时输出 "1", 被用于拷贝赋值时输出 "2", 析构时输出 "3", 其余情况不输出
  Printer c1{Info{.ctor = "0", .copy_ctor = "1", .copy_assign = "2", .dtor = "3"}};

  // 拷贝构造输出 "1", 并且之后 c2.info == c1.info
  // 即此后构造时输出 "0", 被用于拷贝构造时输出 "1", 被用于拷贝赋值时输出 "2", 析构时输出 "3", 其余情况不输出
  Printer c2{c1};
}
// 最终输出
// 0: c1 构造
// 1: Printer c2{c1}
// 3: c2 析构
// 3: c1 析构
拷贝赋值#
int main() {
  // 构造时输出 "0", 被用于拷贝构造时输出 "1", 被用于拷贝赋值时输出 "2", 析构时输出 "3", 其余情况不输出
  Printer c1{Info{.ctor = "0", .copy_ctor = "1", .copy_assign = "2", .dtor = "3"}};

  // 构造时输出 "4", 被用于拷贝构造时输出 "5", 被用于拷贝赋值时输出 "6", 析构时输出 "7", 其余情况不输出
  Printer c2{Info{.ctor = "4", .copy_ctor = "5", .copy_assign = "6", .dtor = "7"}};

  // 输出 "2", 并且之后 c2.info == c1.info
  // 即此后构造时输出 "0", 被用于拷贝构造时输出 "1", 被用于拷贝赋值时输出 "2", 析构时输出 "3", 其余情况不输出
  c2 = c1;
}
// 最终输出
// 0: c1 构造
// 4: c2 构造
// 2: c2 = c1;
// 3: c2 析构
// 3: c1 析构