c++深拷贝与浅拷贝
发布日期:2021-09-25 21:41:00
浏览次数:2
分类:技术文章
本文共 1497 字,大约阅读时间需要 4 分钟。
直接看代码更直观,注释都在代码里
#includeusing namespace std;//浅拷贝democlass A{public: ~A() { cout << "A析构函数" << endl; } A() :m_num(0){} void setNum(int num){ m_num = num; } int getNum() { return m_num; }private: int m_num;};//深拷贝demo1 内存泄漏版class B{public: B(const char *str = ""){ cout << "B构造函数" << endl; m_data = new char[strlen(str) + 1]; memset(m_data, 0, strlen(str) + 1); memcpy(m_data, str, strlen(str)); } ~B(){ if (m_data) { cout << "B析构函数" << endl; delete m_data; m_data = nullptr; } } char *m_data;};//深拷贝demo2 正常版class C{public: C(const char *str=""){ cout << "C构造函数" << endl; m_data = new char[strlen(str) + 1]; cout << "sizeof(m_data)=" << sizeof(m_data) <<" sizeof(*m_data)="< <<" strlen(str)+1="< << endl; memset(m_data, 0, strlen(str) + 1); memcpy(m_data, str, strlen(str)); } ~C(){ if (m_data) { cout << "C析构函数" << endl; delete m_data; m_data = nullptr; } } C(const C &c) { cout << "拷贝构造" << endl; int len = strlen(c.m_data) + 1; m_data = new char[len]; memset(m_data, 0, len); memcpy(m_data, c.m_data, strlen(c.m_data)); } char *getData() { return m_data; } char *m_data;};//客户端int main(){ //浅拷贝 没有指针的时候,不需要担心内存泄漏 A a; a.setNum(10); A a1 = a; cout << "num=" << a.getNum() << endl; //输出10 cout << "num=" << a1.getNum() << endl; //输出10 //深拷贝 崩溃版,指针指向同一块内存,析构时释放指针会被释放两次 //B b; //B b1 = b; //深拷贝 正常版 C c("123456"); cout << "c=" << c.getData() << endl; C c1 = c; cout << "c1="< << endl; return 0;}
效果
转载地址:https://blog.csdn.net/c_shell_python/article/details/107566055 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月01日 13时42分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
输出学生成绩
2019-04-26
时间换算
2019-04-26
查找书籍
2019-04-26
通讯录排序
2019-04-26
奇数值结点链表
2019-04-26
单链表结点删除
2019-04-26
【PAT B1002】 写出这个数
2019-04-26
日期差值
2019-04-26
副本放置策略Copysets论文解读及工程实践
2019-04-26
第五届蓝桥杯 省赛 JavaB组 猜字母
2019-04-26
第四届蓝桥杯 省赛 JavaB组 世纪末的星期
2019-04-26
第四届蓝桥杯 省赛 JavaB组 马虎的算式
2019-04-26
第四届蓝桥杯 省赛 JavaB组 振兴中华
2019-04-26
finally只用一种情况不会操作:电脑断电或者程序被关闭
2019-04-26
2021-06-08
2019-04-26
网络编程之UDP通信
2019-04-26
网络编程之TCP
2019-04-26
网络编程之NIO
2019-04-26
MySQL-操作数据库
2019-04-26
MySQL-操作数据表
2019-04-26