1. 自动存储周期 (automatic storage duration)#
说明#
对于自动存储周期的对象, 它在运行到它的定义时被构造, 在离开它所在的代码块 ({}
包括起来的代码) 时被销毁.
1int main() {
2 Noisy c1{Info{.ctor = "0", .dtor = "1"}};
3}
4// 最终输出
5// 0: c1 构造
6// 1: c1 析构
如果有多个自动存储周期对象要销毁, 它们将按构造的相反顺序销毁.
1int main() {
2 Noisy c1{Info{.ctor = "0", .dtor = "1"}};
3 Noisy c2{Info{.ctor = "2", .dtor = "3"}};
4}
5// 最终输出
6// 0: c1 构造
7// 2: c2 构造
8// 3: c2 析构
9// 1: c1 析构
可以引入代码块, 来缩小对象的生命期.
1int main() {
2 {
3 Noisy c1{Info{.ctor = "0", .dtor = "1"}};
4 }
5 Noisy c2{Info{.ctor = "2", .dtor = "3"}};
6}
7// 最终输出
8// 0: c1 构造
9// 1: c1 析构
10// 2: c2 构造
11// 3: c2 析构
C 风格数组的元素按下标顺序构造, 按逆序销毁.
1int main() {
2 Noisy c1[] = {Noisy{Info{.ctor = "0", .dtor = "1"}},
3 Noisy{Info{.ctor = "2", .dtor = "3"}},
4 Noisy{Info{.ctor = "4", .dtor = "5"}}};
5}
6// 0: 第 0 个元素构造
7// 2: 第 1 个元素构造
8// 4: 第 2 个元素构造
9// 5: 第 2 个元素析构
10// 3: 第 1 个元素析构
11// 1: 第 0 个元素析构
题目#
题 1#
1int main() {
2 Noisy c1{
3 Info{.ctor = "c", .copy_ctor = "m", .copy_assign = "l", .dtor = "e"}};
4
5 Noisy c2{
6 Info{.ctor = "o", .copy_ctor = "a", .copy_assign = "p", .dtor = "t"}};
7
8 Noisy c3 = c1;
9
10 c3 = c2;
11 c3 = c1;
12}
点击查看提示
7 个字符. 英语单词 "完成".
点击查看答案
[在线代码 nxhMWdbf6], 答案: complete
.
题 2#
1int main() {
2 {
3 {
4 Noisy c1{Info{.ctor = "i", .dtor = "r"}};
5 {
6 Noisy c2{Info{.ctor = "s", .dtor = "_"}};
7 }
8 Noisy c3{Info{.ctor = "p", .dtor = "a"}};
9 }
10 Noisy c4{Info{.ctor = "t", .dtor = "i"}};
11 }
12 Noisy c5{Info{.ctor = "t", .dtor = "d"}};
13 Noisy c6{Info{.ctor = "i", .dtor = "e"}};
14 Noisy c7{Info{.ctor = "o", .dtor = "n"}};
15}
点击查看提示
14 个字符. STL 判断范围是否已经划分.
点击查看答案
[在线代码 eMETGvnTW], 答案: is_partitioned
.
题 3#
1int main() {
2 Derived_noisy c1{
3 Info{.ctor = "l", .copy_ctor = "g", .copy_assign = "i", .dtor = "r"},
4 Derived_info{
5 .ctor = "e", .copy_ctor = "m", .copy_assign = "h", .dtor = "o"}};
6
7 Noisy c2{Info{.ctor = "n", .dtor = "r"}};
8
9 {
10 Noisy c3{c1}; // Noisy c3 = c1;
11 {
12 Noisy c4{Info{.ctor = "t", .dtor = "e"}};
13 {
14 Noisy c5{Info{.ctor = "h", .dtor = "_"}};
15 }
16 }
17 }
18}
点击查看提示
12 个字符. 超出实现支持的长度限制时使用的标准库异常. 如当新容量大于 std::vector::max_size()
时, std::vector::reserve
会抛出此异常.
点击查看答案
[在线代码 vaxGPEjhf], 答案: length_error
.