运算符重载与拷贝构造函数

Edit

这个知识点,在C++中看起来非常基本,但是初学者往往容易犯错。这里提及的是=的重载与拷贝构造函数。
当出现下面代码的时候,是调用=重载吗?

class A {}
A a;
A b = a;

答案是错,这里将会调用拷贝构造函数。如果没有显式定义拷贝构造函数,即调用默认拷贝构造函数,即浅拷贝,如果类定义中涉及内存的分配,则会出现意想不到的结果。
=运算符只会在赋值的时候使用,而在构造的时候会使用拷贝构造函数。如下是使用=的例子:

A a;
A b;
b = a;
%23%u8FD0%u7B97%u7B26%u91CD%u8F7D%u4E0E%u62F7%u8D1D%u6784%u9020%u51FD%u6570%0A@%28myblog%29%5Bc/c++%5D%0A%0A%u8FD9%u4E2A%u77E5%u8BC6%u70B9%uFF0C%u5728C++%u4E2D%u770B%u8D77%u6765%u975E%u5E38%u57FA%u672C%uFF0C%u4F46%u662F%u521D%u5B66%u8005%u5F80%u5F80%u5BB9%u6613%u72AF%u9519%u3002%u8FD9%u91CC%u63D0%u53CA%u7684%u662F%60%3D%60%u7684%u91CD%u8F7D%u4E0E%u62F7%u8D1D%u6784%u9020%u51FD%u6570%u3002%0A%u5F53%u51FA%u73B0%u4E0B%u9762%u4EE3%u7801%u7684%u65F6%u5019%uFF0C%u662F%u8C03%u7528%60%3D%60%u91CD%u8F7D%u5417%uFF1F%0A%60%60%60%0Aclass%20A%20%7B%7D%0AA%20a%3B%0AA%20b%20%3D%20a%3B%0A%60%60%60%0A%u7B54%u6848%u662F%u9519%uFF0C%u8FD9%u91CC%u5C06%u4F1A%u8C03%u7528%u62F7%u8D1D%u6784%u9020%u51FD%u6570%u3002%u5982%u679C%u6CA1%u6709%u663E%u5F0F%u5B9A%u4E49%u62F7%u8D1D%u6784%u9020%u51FD%u6570%uFF0C%u5373%u8C03%u7528%u9ED8%u8BA4%u62F7%u8D1D%u6784%u9020%u51FD%u6570%uFF0C%u5373%u6D45%u62F7%u8D1D%uFF0C%u5982%u679C%u7C7B%u5B9A%u4E49%u4E2D%u6D89%u53CA%u5185%u5B58%u7684%u5206%u914D%uFF0C%u5219%u4F1A%u51FA%u73B0%u610F%u60F3%u4E0D%u5230%u7684%u7ED3%u679C%u3002%0A%60%3D%60%u8FD0%u7B97%u7B26%u53EA%u4F1A%u5728%u8D4B%u503C%u7684%u65F6%u5019%u4F7F%u7528%uFF0C%u800C%u5728%u6784%u9020%u7684%u65F6%u5019%u4F1A%u4F7F%u7528%u62F7%u8D1D%u6784%u9020%u51FD%u6570%u3002%u5982%u4E0B%u662F%u4F7F%u7528%60%3D%60%u7684%u4F8B%u5B50%uFF1A%0A%60%60%60%0AA%20a%3B%0AA%20b%3B%0Ab%20%3D%20a%3B%0A%60%60%60