最近又碰到了拷贝构造函数的问题,又复习了网易云课堂《C++程序设计入门》这方面的内容,看到崔毅东老师的一段代码,心中有了一些疑问,想要问问大家:
主函数是这样写的:
Person person1(111, 1970, 5, 3);
Person person2(222, 2000, 11, 8);
person1 = Person(person2);//有疑问的是这一句,他到底调用的是什么样的构造函数呢?我知道肯定不是拷贝构造函数,因为拷贝构造函数的格式是这样的:Person person1(person2);且是在person1刚定义时进行的操作.
下面是本程序中Person类构造函数的声明:
Person(int id, int year, int month, int day);//仅这一个构造函数
class Example
{
public:
Example(); //默认函数
~Example(); //析构函数
Example(int n); //重构函数
Example(const Example&); //拷贝构造函数
Example& operator = (const Example&); //赋值符重载
public:
char *pBuffer;
int nSize;
};
Example::Example()
{
pBuffer = NULL;
nSize = 0;
}
Example::Example(const Example& RightSides)
{
pBuffer=NULL;
*this = RightSides;
}
Example::~Example()
{
if (pBuffer != NULL)
{
delete pBuffer;
}
}
Example& Example::operator = (const Example& RightSides)
{
nSize = RightSides.nSize;
char *temp = new char[nSize];
memcpy(temp, RightSides.pBuffer, nSize*sizeof(char));
delete []pBuffer;
pBuffer = temp;
return *this;
}
Example::Example(int n)
{
pBuffer = new char[n];
nSize = n;
}
int main()
{
Example A(40),B(60);
A = B;
return 0;
}
按理来说第二句会调用一个拷贝构造,一个拷贝赋值,但是编译器会做优化,做完优化可能就只做一个构造了,这个有可能是 这样,你可以试试