什么是浅复制与深复制

来源:互联网 发布:桌面提醒软件 编辑:程序博客网 时间:2024/05/22 03:05
浅复制又称浅拷贝,指的是在对象复制时,只是对对象中的数据成员进行简单的赋值,默认复制构造函数执行的也是浅复制。浅复制实例代码如下:
#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
原创粉丝点击