本站首页    管理页面    写新日志    退出


«April 2021»
123
45678910
11121314151617
18192021222324
252627282930


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:918303
建立时间:2005年5月17日




深拷贝与浅拷贝:
软件技术

oceanblue 发表于 2005/6/24 13:42:34

深拷贝与浅拷贝: 前提:用一个对象构造另外一个对象; 特征:被复制对象的构造函数中,有成员变量申请了堆内存空间 Eg: class Person {     public:        Person(char* pN)        {            m_pName = new char[strlen(pN)+1];            if(m_pName!=NULL)               strcpy(m_pName,pN);        }     ~Person()     {        cout<<"Destructing  "<<m_pName<<endl;        delete []m_pName;     }       protected:        char * m_pName;   };   浅拷贝: Void main() {     Person p1(“Andy”);     Person p2 = p1;或者 Person p2(p1); } 此时会发生ERROR,Person p1,p2中的成员变量m_pName指向的是同一段堆内存,当P1析构时,已经释放了该堆内存。 当对一段堆内存delete两次时,会出错。因此,当P2析构函数执行时,内存会出错。   深拷贝: 在class Person 中增加一个Person类拷贝构造函数,为P2的成员变量m_pName重新分配一段堆内存; Person(Person &p) { m_pName = new char[strlen(p.m_pName)+1]; if(m_pName!=NULL)     strcpy(m_pName,p.pName); }  


阅读全文(5282) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144567364 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号