C++ 类与对象 浅复制深复制

本文从WordPress迁移而来, 查看全部WordPress迁移文章

对象的复制要注意一个细节

1
2
3
4
5
class TEST{
//..........
};
TEST t1(....);
TEST t2 = t1;

何为 “浅复制”

TEST t2 = t1;这句是个对象的复制,看起来很方便,但其实调用了复制构造函数;

如果自己没有编写复制构造函数,那么系统将调用默认版本的复制构造函数

如果整个类的数据中,都没有指针,那么问题不大,但是如果有指针,指针部分会出问题

t1中的指针p和t2中的指针p指向的同一内存空间,如果通过t1的指针修改数据,会导致t2部分的数据也变化

如果t1的指针指向的内存被释放,t2的指针就成了个野指针

但是对于非指针类型的数据不会有这个问题

所以,良好的习惯应该是自定义复制构造函数(总不能不让我复制吧)

对于指针部分,t2的指针应该自己去申请一个内存空间,不和t1共用,然后将t1指针指向的数据逐个搬到t2中,虽然麻烦一些但安全。

如果本意就是两个对象能共同操作一个内存空间,那可以像前面说的那样做

如果两个对象不共用任何的内存单元,操作完全独立,那么那样的复制行为称为 “深复制”