C++拷贝构造与operator=的区别
时间: 2025-02-02 20:13:26 浏览: 40
在C++中,拷贝构造函数和赋值运算符(operator=)都用于对象的复制,但它们在使用场景和实现方式上有一些区别。
1. **拷贝构造函数**:
- 拷贝构造函数是一个特殊的构造函数,用于创建一个新对象,并将其初始化为现有对象的副本。
- 拷贝构造函数在以下情况下被调用:
- 用一个对象初始化另一个新对象时,例如 `ClassName obj2 = obj1;`
- 对象作为值传递(pass by value)给函数时。
- 对象作为值返回(return by value)从函数返回时。
- 拷贝构造函数的声明形式通常为 `ClassName(const ClassName& other)`。
2. **赋值运算符(operator=)**:
- 赋值运算符用于将一个已存在的对象赋值给另一个已存在的对象。
- 赋值运算符在以下情况下被调用:
- 使用赋值操作符将一个对象的值赋给另一个已存在的对象时,例如 `obj2 = obj1;`
- 赋值运算符的声明形式通常为 `ClassName& operator=(const ClassName& other)`。
### 示例代码
```cpp
#include <iostream>
#include <cstring>
class MyClass {
private:
int* data;
public:
// 构造函数
MyClass(int value) {
data = new int(value);
std::cout << "Constructor called" << std::endl;
}
// 拷贝构造函数
MyClass(const MyClass& other) {
data = new int(*other.data);
std::cout << "Copy constructor called" << std::endl;
}
// 赋值运算符
MyClass& operator=(const MyClass& other) {
if (this != &other) {
delete data;
data = new int(*other.data);
std::cout << "Assignment operator called" << std::endl;
}
return *this;
}
// 析构函数
~My
阅读全文
相关推荐


















