c++ 浅拷贝和深拷贝 举例简要说明。言简意赅。

 我来答
要有一个感恩心5106
2007-09-01 · TA获得超过398个赞
知道小有建树答主
回答量:591
采纳率:0%
帮助的人:0
展开全部
class Test{

public:
    
    Test(int num) : _val(new int(num)) {}
    //Test(const Test &t) : _val(new int(*(t._val))) {}
    ~Test(){ delete _val; }
    
private:

    int *_val;
};

现在定义两个对象,
Test t1(9);
Test t2(t1);

如果你不提供copy构造函数(注释掉的那个), 那么t1和t2的成员_val指向同一个对象,
当析构的时候, 同一个对象被析构了两次, 肯定出问题了.

反之, 提供了被注释的copy构造函数, t2的_val指向了一个新对象, 这样程序就没问题了.

前者就是潜拷贝, 后者就是深拷贝.
吉米有态度
2007-09-01 · TA获得超过119个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:238万
展开全部
例如,在一个类中,有一个指向一个Buffer的指针,所以我们可以说这个指针指向了一个资源(这个资源可以是一块保存数据的内存)。
浅拷贝,也就是按照比特一位一位地进行拷贝,是把一个类完全一样拷贝到另一个类。这时就出现问题了:类内部的指针的值是一样的,也就是说,两个类的实例内部的指针指向了同一块内存。当这两个对象析构的时候,同一块内存就会给析构两次,当然会出现问题。
深拷贝,就是在这点上和浅拷贝不同的,也就是说,在拷贝的时候,深拷贝会提供一块新的内存用来保存数据,并使新的对象的指针指向这块内存,这两个对象析构的时候,也就不会把同一块内存析构两次了。
一般,如果一个类的作者没有提供一个拷贝函数,编译器会自动提供一个拷贝函数,而这个拷贝函数就是浅拷贝。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式