浅拷贝 vs 深拷贝
含指针成员时,拷贝指针 ≠ 拷贝它指向的内容
DoubleArray b = a; // 拷贝构造
浅拷贝(默认)
只复制指针 → 共享同一块堆内存
a
栈对象
low/high
0,2
storage
0x6a40
b
b = a 的副本
low/high
0,2
storage
0x6a40
堆内存(共享一份)
1.1
2.2
3.3
@0x6a40
两个 storage 都是 0x6a40,指向同一块
改 a 会动到 b;析构时 double free / 悬垂指针 → 崩溃
深拷贝(自定义)
new 一块新内存 → 各自独立
a
栈对象
low/high
0,2
storage
0x6a40
b
b = a 的副本
low/high
0,2
storage
0x8c10
1.1
2.2
3.3
@0x6a40
1.1
2.2
3.3
@0x8c10(新 new 的一份)
b.storage = 0x8c10 ≠ a.storage
逐元素复制内容;改 a 不影响 b;各自安全析构
▶ 重播