18、深入理解深拷贝与浅拷贝

深入理解深拷贝与浅拷贝

1. 引言

在面向对象编程中,复制对象是一个常见的操作。然而,不同的复制方式会导致不同的结果。特别是当我们处理包含动态分配内存的对象时,理解深拷贝和浅拷贝的概念至关重要。本文将深入探讨这两种复制方式的区别及其应用场景,并通过具体示例和代码演示如何正确实现深拷贝。

2. 浅拷贝与深拷贝的基本概念

2.1 浅拷贝

浅拷贝是指仅复制对象的数据成员,而不重新分配新的内存空间。对于包含指针成员的对象,浅拷贝会导致多个对象共享同一块内存。这种行为在某些情况下可能是有害的,尤其是当对象的析构函数释放这块内存时,其他对象仍然持有指向这块内存的指针,从而引发未定义行为。

示例

假设我们有一个 Person 类,它包含一个指向字符串的指针 pName 。如果我们使用默认的复制构造函数进行浅拷贝,两个 Person 对象将共享同一块堆内存。

class Person {
public:
    Person(char *pN) {
        cout << "constructing " << pN << endl;
        pName = new char[strlen(pN) + 1];
        if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值