c++类实现拷贝构造和赋值运算符
时间: 2024-11-24 15:10:31 浏览: 6
详解C++ 拷贝构造函数和赋值运算符
5星 · 资源好评率100%
在C++中,拷贝构造函数(Copy Constructor)和赋值运算符(Assignment Operator)是两个特殊的成员函数,用于处理类的对象之间的复制操作。
1. **拷贝构造函数**:
- 它的名称默认就是`ClassName(const ClassName&)`,如果你想要自定义,可以提供一个特定的名称并接受一个同类型的临时对象作为参数。
- 主要作用是在创建新对象时,将已有对象的内容浅复制一份到新对象中。例如,`MyClass obj1; MyClass obj2(obj1);` 这里就使用了拷贝构造函数。
- 如果类中有动态分配内存(如指针)、成员函数等非基本数据类型,需要手动实现拷贝构造函数以防止浅拷贝带来的问题。
2. **赋值运算符**:
- 默认的命名格式是`ClassName& operator=(const ClassName&)` 或 `operator=`,它接收一个同类的对象,并将其内容赋给当前对象。
- 赋值运算符的主要任务是深拷贝,当`obj1 = obj2`时,实际上是将`obj2`的所有数据移动到`obj1`中。
- 对于有资源管理、异常处理等情况,也需要谨慎编写,比如释放旧资源、避免悬垂指针等问题。
```cpp
// 示例:
class MyClass {
private:
int* data;
public:
// 拷贝构造函数(默认会有一个)
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; // 可能需要删除已分配的内存
}
};
```
阅读全文