早教吧 育儿知识 作业答案 考试题库 百科 知识分享

“如果一个类包含指向另一个对象的指针数据成员,应为该类提供复制构造函数。”那位大虾给解释一下

题目详情
“如果一个类包含指向另一个对象的指针数据成员,应为该类提供复制构造函数。”那位大虾给解释一下
▼优质解答
答案和解析
这就是所谓的深拷贝,C++默认的对象复制方式是按位拷贝(通称浅拷贝),(赋值也是),即将所有的数据元素按照物理的字节排列原样地拷贝被复制(赋值也是)对象里,正常情况下没有问题,因为类的每个数据成员都有自己独自的空间,但是一旦该成员是指针时,问题就出现了,虽然两个指针都有自己的空间,但是因为复制的是指针的值,结果就是这两个指针指向了同一个空间,也就是说,凡是赋值的都共享同一块空间,带来的问题主要有两种:1、访问不可知空间----通过一个指针释放了该空间,另外一个指针还指向该区间,2、某一个修改了,别的也变了(如同全局变量),当然还有内存泄漏的问题,为避免这个问题,该类必须自定义复制构造函数,在这里可以为每个指针重新分配空间,并完成指针指向目标的严格复制,可以避免刚才说的问题1、2,但是3不能避免。实际上,这种场合下不仅需要自定义复制构造函数,还需要重载赋值运算符,并且还要自定义析构函数,其详细语法格式和探讨参见比较深入的C++教材