首页 > 其他 > 详细

深拷贝和浅拷贝

时间:2014-03-05 18:19:43      阅读:441      评论:0      收藏:0      [点我收藏+]

拷贝构造函数:首先是一个构造函数,特殊在只有一个参数且用对象的引用作参数(规定),函数体是一些赋值语句

浅拷贝:对对象中的数据成员简单赋值,默认拷贝就是浅拷贝,分系统默认和手写的

深拷贝:对象存在动态成员,也就是自己在堆中申请了一块内存空间(C++中用new申请)一定是自己写的:对一些放在栈中的成员变量(普通变量)赋值,手动申请一个和构造函数中手动申请的一块内存空间(堆中)相同大小的内存空间并赋值

例如:深拷贝


#include<IOSTREAM.H>
class Rect
{
public:
    Rect()      // 构造函数,p指向堆中分配的一空间
    {
        p = new int(100);
    }
    Rect(const Rect& r)
    {
        width = r.width;
        height = r.height;
        p = new int;    // 为新对象重新动态分配相同大小的空间,只是它的值不一定是100
        *p = *(r.p);//赋值
    }
    ~Rect()     // 析构函数,释放动态分配的空间
    {
        if(p != NULL)  
        {
            delete p;
        }
    }
public:
    int width;
    int height;
    int *p;     // 一指针成员
};
int main() 
{ 
    Rect* rect1=new Rect; 
    Rect rect2(rect1);   // 复制对象 
    cout<<(rect1.p)<<" "<<(rect2.p)<<endl;//输出100 100 说明对象rect1 ,rect2一样
    return 0; 
}


深拷贝和浅拷贝,布布扣,bubuko.com

深拷贝和浅拷贝

原文:http://lyunfan.blog.51cto.com/6649420/1367811

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!