拷贝构造函数和赋值运算符重载之间有什么区别?

拷贝构造函数赋值运算符重载都用于在C++中复制对象,但是它们的用途和执行方式有所不同。

  1. 拷贝构造函数:拷贝构造函数在一个新对象创建的时候被调用,用于将一个已存在的对象的状态(也就是成员变量的值)复制到新对象。例如:
class Example {
public:
    int value;
    Example(int val) : value(val) { } // 常规构造函数
    Example(const Example& other) : value(other.value) { } // 拷贝构造函数
};

Example a(10); // 使用常规构造函数
Example b(a); // 使用拷贝构造函数,b的value值将会是10
  1. 赋值运算符重载:赋值运算符重载在一个已经存在的对象需要被赋予另一个已经存在的对象的状态时被调用。例如:
class Example {
public:
    int value;
    Example(int val) : value(val) { } // 常规构造函数
    Example& operator=(const Example& other) { // 赋值运算符重载
        if (this != &other) { // 防止自我赋值
            value = other.value;
        }
        return *this;
    }
};

Example a(10); // 使用常规构造函数
Example b(20); // 使用常规构造函数
b = a; // 使用赋值运算符重载,b的value值将会是10

注意,赋值运算符重载通常需要注意自我赋值的情况,并且应返回对象本身的引用,这样可以支持连续赋值如a = b = c

总的来说,拷贝构造函数用于初始化新对象,而赋值运算符重载用于已存在的对象。

发表评论

后才能评论