深拷贝 赋值

        // 实现克隆Clone
        // let obj = new window[this._type];
        // let obj = DObject.deepCopy(this);
        // let obj = this.constructor();
        let obj = Class.createObject(this._type, false);

1. new window[type] 

    要确保type 就是类名,否则出错。

2. DObject.deepCopy(this);

    深拷贝自己实现.

3. this.constructor();

    因为是this 调用constructor(),可能会修改this 本身,导致错误.

4. createObject 利用工厂模式克隆构造对象;

除了深拷贝外,其他方法都要进行 assign 赋值,赋值要注意值引用.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深拷贝是一种在对象赋值时,将源对象的所有成员变量都复制到目标对象中的操作。深拷贝赋值重载函数是为了实现深拷贝而定义的特殊函数。 在C++中,如果一个类中包含指针类型的成员变量,简单的赋值操作只会复制指针的地址,而不会复制指针指向的实际数据。这就可能导致多个对象共享同一块内存,当其中一个对象释放内存时,其他对象也会受到影响。 为了解决这个问题,我们需要自定义深拷贝赋值重载函数。该函数首先会为目标对象分配新的内存空间,然后将源对象的数据复制到新的内存空间中,从而实现真正的拷贝。 以下是一个示例的深拷贝赋值重载函数的实现: ```cpp class MyClass { private: int* data; public: // 构造函数 MyClass(int value) { data = new int(value); } // 拷贝构造函数 MyClass(const MyClass& other) { data = new int(*other.data); } // 赋值重载函数 MyClass& operator=(const MyClass& other) { if (this != &other) { delete data; // 释放原有内存 data = new int(*other.data); // 深拷贝数据 } return *this; } // 析构函数 ~MyClass() { delete data; } }; ``` 在上述示例中,赋值重载函数首先检查源对象和目标对象是否是同一个对象,如果是同一个对象则不进行拷贝操作。然后,它释放目标对象原有的内存空间,并为目标对象分配新的内存空间,将源对象的数据复制到新的内存空间中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值