一、浅拷贝内存分析
1、要分析的代码
下面的代码中 , 没有定义拷贝构造函数 , 因此 C++ 编译器会自动生成一个 只进行 浅拷贝 的 默认拷贝构造函数 ;
调用默认拷贝构造函数 , 对新对象进行赋值...s2 = s;
内存分析 :
使用 默认的 拷贝构造函数 , 将 s 拷贝赋值给 s2 , 执行的是浅拷贝 , 也就是直接将 成员变量 进行简单的拷贝赋值 ;
将 s.m_age 赋值给 s2.m_age...两个指针指向了相同的堆内存地址 ;
上述指针的拷贝 , 只是将指针地址拷贝了 , 没有将指针指向的数据进行拷贝 , 这就是浅拷贝 , 显然浅拷贝是有问题的 ,
如果对其中一个变量的 s.m_name...修改拷贝对象成员变量指针指向的数据 :
// 修改 s2 对象
strcpy(s2.m_name, "Jey");
内存分析 :
浅拷贝时 指针的拷贝 , 只是将指针地址拷贝了 , 没有将指针指向的数据进行拷贝..., 先析构 s2 拷贝对象 , 然后析构 s 原始对象 ;
将 s2 拷贝对象析构后 , s2.m_name 指针指向的堆内存会被 free 释放 ;
但此时 s.m_name 指针还指向被释放的内存