一、浅拷贝内存分析
1、要分析的代码
下面的代码中 , 没有定义拷贝构造函数 , 因此 C++ 编译器会自动生成一个 只进行 浅拷贝 的 默认拷贝构造函数 ;
调用默认拷贝构造函数 , 对新对象进行赋值...// 浅拷贝 字符串指针时 , 直接将指针进行拷贝 , 没有拷贝具体的值
// s 和 s2 的 m_name 成员是同一个指针
// 如果析构时 , 先析构 s2 , 将指针释放了
//...成员分配内存
// 注意还要为字符串结尾的 '\0' 字符分配内存
m_name = (char*)malloc(len + 1);
// 拷贝字符串
// C++ 中使用该函数需要..., 地址为 0x1000
分配的内存大小是 “Tom” 字符个数 + 1 , 多余的 1 字节是 ‘\0’ 字符串结尾 , 也就是 4 字节 ;
m_name 最终的指针值是 堆内存中的地址值 , 是..., 对栈内存对象进行销毁时 , 逐个析构对象 ;
在下图的 栈内存 中 , 根据 栈内存 后进先出原则 , 先析构 s2 拷贝对象 , 然后析构 s 原始对象 ;
将 s2 拷贝对象析构后 , s2