c++中拷贝构造函数,浅拷贝和深拷贝的区别

在C++提供了一种特殊的构造函数,称为拷贝构造函数。拷贝构造函数具有一般构造函数的所有特性,其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定的对象)去初始化一个新的同类对象,即完成本类对象的复制。程序员如果没有定义拷贝构造函数,系统会自动生成一个默认的拷贝构造函数,其功能是把已存在的每个数据成员都复制到新对象中。程序员定义拷贝构造函数时,一般形式:

  类名(类名 & 对象)

{

}

拷贝构造函数在三种情况下会被自动调用

(1)用一个对象去初始化一个同类的对象  B(A)

(2)如果函数的形参是对象,进行形参和实参结合时,调用拷贝构造函数。f(A);

(3)如果函数的返回值是对象,返回主调函数时,调用拷贝构造函数。 B=g();

其中默认的拷贝构造函数是浅拷贝。当类的数据成员有指针类型是,假设同类对象A初始化B,A和B对象使用同一内存区域。在撤销对象时,导致对这一内存的两次释放,也就是说浅层复制:只复制指向对象的指针,而不复制引用对象本身。这时候要求程序员编制拷贝构造函数,使对象B的指针指向另外的内存区域,这叫深拷贝,深层复制:复制引用对象本身。

上一篇:反射实现IOC功能


下一篇:linux redis 启动 overcommit_memory