简述深浅拷贝

  • 先说拷贝构造函数

是公有函数,用于创建对象时使用同类对象来初始化新对象

用法:类名 + (const 类名& 对象名)

特征:是构造函数的重载、单参、必须传对象的引用否则会一直递归下去、如果没有显式定义则编译器会默认生成

  • 浅拷贝

对于拷贝构造函数,如果不显示给出则编译器默认给出,但是编译器给出的拷贝构造函数进行的仅仅是值拷贝(位拷贝)

一般情况下,浅拷贝没有问题,但如果有指针成员还用浅拷贝的话就会出错。见名知意,拷贝拷贝,对于指针成员,也是拷贝,不过仅仅是复制了另一个指针指向相同的资源,可能有人会想两个指针指向同一块资源怎么了,没问题啊。但是别忘了构造函数操作的是对象,对象是构造出来的,那用完了就必然得销毁,销毁就要调用析构函数,析构的时候用一块地址被释放两次能不出错吗?

  • 深拷贝

深拷贝与浅拷贝的区别是在拷贝的时候不仅拷贝了值,还将资源也拷贝一份,这样就不会出现上面的情况。但是深拷贝必须由自己来实现

Test(const char& A){
    a = A.a;
    str = new char[a];
    if(!str){
        strcpy(str, A.str);
    }
}

猜你喜欢

转载自blog.csdn.net/IronMan240/article/details/82018102