c++拷贝构造【显式调用】和运算符=重载构造【隐式调用】解析

深拷贝 vs. 浅拷贝

  • 深拷贝:开辟新内存,独立对象,堆区
  • 浅拷贝:共享内存,引用对象,栈区
深拷贝:深拷贝是一种拷贝方式,它会在堆区重新分配内存并复制对象的内容。
这意味着原对象和新对象是完全独立的,对其中一个对象的修改不会影响另一个对象。
通常用于处理动态分配内存的情况,如指针指向的数据。

浅拷贝:浅拷贝是一种拷贝方式,它只是简单地复制对象的值或引用。
这意味着原对象和新对象会共享相同的内存,对其中一个对象的修改可能会影响另一个对象。
通常用于处理栈上分配的对象,如基本数据类型或对象的引用。

拷贝构造

又叫:显式调用

  • 用于对象初始化和参数传递。
  • 语法:MyClass(const MyClass& other)

示例

MyClass obj1;        // 创建第一个对象
MyClass obj2(obj1);  // 使用拷贝构造函数创建第二个对象并复制内容

运算符=重载构造

又叫:隐式调用

  • 用于自定义对象赋值行为
  • 语法:MyClass& operator=(const MyClass& other)

示例

MyClass obj1;   // 创建第一个对象
MyClass obj2;   // 创建第二个对象

obj2 = obj1;    // 使用运算符=重载构造赋值内容

explicit 关键字

  • 防止隐式调用

示例

class MyClass {
    
    
public:
    explicit MyClass(int value) {
    
    
        // 构造函数代码
    }
};

MyClass obj(42);   // 合法的显式创建对象
// 下面这行将引发编译错误,因为没有隐式类型转换
// MyClass obj = 42;

猜你喜欢

转载自blog.csdn.net/qq_43537701/article/details/132980999