深拷贝与浅拷贝
来源:互联网 发布:svd 协同过滤推荐算法 编辑:程序博客网 时间:2024/06/05 01:55
深拷贝和浅拷贝
浅拷贝:在拷贝指针的时候只是拷贝了地址,不会进行空间的复制
class Test8_1{public: Test8_1(int id, char *name) { m_id = id; m_name = (char *)malloc(sizeof(char)* 20); strcpy(m_name, name); } ~Test8_1() { if (m_name != NULL) { free(m_name); m_name = NULL; } printf("析构函数被调用*********\n"); } void print() { printf("id = %d, name = %s\n", m_id, m_name); }private: int m_id; char *m_name;};int main(){ Test8_1 t1(10, "wang"); t1.print(); Test8_1 t2 = t1; return 0;}
这个函数就是一个浅拷贝构造,如果只创建一个对象t1,不会有太多问题,但如果将t1赋给新对象t2,此时就会发生问题了,我们知道在程序结束时,析构函数会释放掉开辟的空间,因为我们创建了两个对象,所以析构函数就会释放两次,那么问题来了,我们只malloc了一次,即只开辟了一快空间,于是就出现了访问非法内存的问题,程序也就崩了。
那么如何避免这一问题呢?
我们可以进行深拷贝
浅拷贝是只复制了地址,没有复制空间,而深拷贝就进行的很彻底,把空间也复制了一份
在上面的函数中我们只要自己写一个拷贝构造函数就可以解决这一问题了
Test8_1(const Test8_1 &obj){ m_id = obj.m_id; m_name = (char *)malloc(sizeof(char)*20); strcpy (m_name, obj.m_name);}
阅读全文
0 0
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 解除oracle锁表
- 排序特点总结
- Java Swing中文乱码解决方法
- CocoaPods 安装与使用及出现的问题
- 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决
- 深拷贝与浅拷贝
- mysql命令更改列长度
- CSS3-二维变形
- springboot security基于注解配置权限与CAS单点登录配置。
- Redis的持久化
- 对芯片操作的一点总结
- windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的解决方式 最近打算开始研究一下机器学习,今天在windows上装tensorflow花了点功夫
- String 判断字符串是否包含某个字符
- 69. Sqrt(x)