一看到“=”操作符,认为必然调用赋值函数,然而在下面的例子中,语句a b = c显示的是调用拷贝构造函数。
结论:在看到“=”操作符为对象赋值的时候,如果是在对象的定义时候出现则调用拷贝构造函数,如果是不是,例子中的b=d,则为赋值函数。
#include <iostream>
using namespace std;
class a
{
public:
a(int d):
data(d)
{};
a(const a &aa);
a& operator=(const a &aa);
void show();
private:
int data;
};
a::a(const a &aa)
{
cout <<"copy constructor"<< endl;
data = aa.data;
//return *this;
};
a& a::operator=(const a &aa)
{
cout << "assignment" <<endl;
if(this == &aa)
return *this;
data = aa.data;
return *this;
};
int main()
{
a c(1);
a d(2);
a b = c; //赋值函数?还是拷贝构造函数?
b = d;
return 0;
}
运行结果
[root@localhost tmpc++]# ./s1
copy constructor
assignment