拷贝构造函数、 深拷贝&浅拷贝

对于基本数据类型,拷贝构造函数类似如下:

int a = 10;

float b = 100.0;

而对于自定义的结构,拷贝构造函数并没有那么随意。

  • 默认拷贝构造函数&浅拷贝

当用户未声明拷贝构造函数时,系统会自动生成一个默认的拷贝构造函数,它实现位拷贝。这就引出了浅拷贝。

浅拷贝:当对象具有资源(堆、系统资源等)时,拷贝时未重新分配该资源(而是和被拷贝对象共享)。反之,叫做深拷贝。浅拷贝容易造成资源的归属不明确,释放时可能会导致出现错误(共享指针了解下)。

  • 自定义拷贝构造函数

可以通过自定义拷贝函数来实现数据的深拷贝。拷贝函数定义格式如下

ClassName(const ClassName & p){}

拷贝构造函数和构造函数有相似之处也有区别,主要时参数必须时一个同类型对象的常引用。

class student{
public:
    student(cosnt student& s){
        nomber = new int;
        *nomber = *s.nomber;
    }
private:
    int* nomber;
}
  • 注意:默认拷贝构造函数、自定义拷贝构造函数深拷贝、浅拷贝无直接关系。深、浅拷贝的区分以拷贝构造函数的实际定义方式为准。










猜你喜欢

转载自blog.csdn.net/qq_26272885/article/details/80892858