什么是浅复制与深复制

浅复制又称浅拷贝,指的是在对象复制时,只是对对象中的数据成员进行简单的赋值,默认复制构造函数执行的也是浅复制。浅复制实例代码如下:
#include <iostream>
using namespace std;
class Test
{
public:
    Test(int temp)
    {
        p1 = temp;
    }
    Test(Test &c_t)
    {
        cout << "进入copy构造函数" << endl;
        p1 = c_t.p1;
    }
    int p1;
protected:
private:
};
int main()
{
    Test a(99);
    Test b = a;
    cout << b.p1 << endl;

    system("pause");
    return 0;
}
深复制又称深拷贝,对于对象中的动态成员,就不仅仅是简单的赋值了,而是重新动态分配空间。深复制的示例代码如下:
#include <iostream>
using namespace std;
class Rect
{
public:
    Rect()//构造函数,p指向堆中分配的空间
    {
        p = new int(100);
    }
    Rect(const Rect& r)
    {
        width = r.width;
        heigh = r.heigh;
        p = new int;
        *p = *(r.p);
    }
    ~Rect()
    {
        if (p!=NULL)
        {
            if (p!=NULL)
            {
                delete p;
            }
        }
    }
protected:
private:
    int width;//宽
    int heigh;//高
    int *p;//指针成员
};
int main()
{

    system("pause");
    return 0;
}
上面代码中rect1的p和rect2的p各指向一段内存空间,但他们指向的空间具有相同的内容。
如果一个类拥有资源,当这个类的对象发生复制的过程,这个过程就可以叫做深复制,如果对象存在资源但在复制过程中并未复制资源就是浅复制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值