使用了默认的赋值拷贝构造函数,此时应该是浅拷贝,那么有点疑惑:
为什么&(s1.m_data.name) 和 &(s2.m_data.name) 的地址不一样? 难道进行了深拷贝吗?
class STU {
public:
struct DATA {
int num;
std::string name;
};
DATA m_data;
};
int main() {
STU s1;
STU s2;
s1.m_data.name = "Tom";
s1.m_data.num = 20;
s2 = s1;
printf("%p == %p, %p == %p, %p == %p\n", &s1, &s2, &s1.m_data, &s2.m_data, &(s1.m_data.name), &(s2.m_data.name));
输出如下:
0x7ffcb22a1350 == 0x7ffcb22a1380, 0x7ffcb22a1350 == 0x7ffcb22a1380, 0x7ffcb22a1358 == 0x7ffcb22a1388
string 是个容器啊,它有自己的拷贝方法,当你的结构需要拷贝 string 的时候,会调用 string 的拷贝方法,所以这里不存在浅拷贝。
只有你的结构成员是指针型变量,而结构本身又没提供针对这个指针型变量的拷贝处理的时候,才会出现浅拷贝的问题。