本文只是演示何时调用拷贝构造函数,何时用=运算符重载
不考虑类的实现正确。
问题
SomeClass a;
SomeClass b = a; //调用的是拷贝构造函数, 还是=运算符重载?
演示代码 ::
#include <iostream>
class TC
{
public:
TC(){std::cout << "TC() \n";}
~TC(){std::cout << "~TC()\n";}
TC(TC &a){std::cout << "TC(TC &a)\n";}
TC& operator= (TC a){std::cout <<" TC= \n" ; return *this;}
private:
int x;
};
int main(int argc, const char * argv[])
{
// insert code here...
TC a;
TC b = a;
b = a;
return 0;
}
输出 ::
TC()
TC(TC &a)
TC(TC &a)
TC=
~TC()
~TC()
~TC()
分析 :
TC a ; //这个不用考虑 ,对应 TC()
TC b = a; // 这个对应 TC(TC &a) ,
b = a; // 这个对应 TC(TC &a) 和 TC= . 分为两步,第一步 a到参数a,属于定义,拷贝构造. 然后内部执行.
a,b 两个,加上一个参数 T a. 总共3次构造.