深拷贝 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;