调用拷贝构造函数的三种case
1. MyPoint p2 = p1; MyPoint p2(p1);
case1中的重点:MyPoint p3 = MyPoint(3,3); //此时:C++编译器进行优化,
//只调用一次构造函数(并不涉及拷贝构造函数的调用)
2. 形参:类对象,实参:类对象
3. 返回值:类对象
/*总结与技巧:
一定要区分等号的两种含义:其中一种是拷贝、另外一种是简单赋值。
临时对象析构的时间是遇到主调函数中的第一个分号“;”。
*/
#include <iostream>
using namespace std;
class MyPoint
{
public:
MyPoint()
{
cout<<(int)this<<"构造函数"<<endl;
}
MyPoint(const MyPoint& obj)
{
cout<<(int)this<<"拷贝构造函数"<<endl;
}
MyPoint& operator=(const MyPoint& obj)
{
cout<<"赋值等号操作"<<endl;
return *this;
}
~MyPoint()
{
cout<<(int)this<<"析构函数"<<endl;
}
};
void f1(MyPoint p)
{
}
MyPoint f2()
{
MyPoint p;
return p;
}
int main()
{
//case1:
MyPoint p1; //构造函数
MyPoint p2 = p1; //MyPoint p2(p1); //拷贝构造函数
//case1中的重点
MyPoint p3 = MyPoint(); //【重点】C++编译器进行了优化,只调用——>构造函数
//case2:
MyPoint qq; //构造函数
f1(qq); //拷贝构造函数tmp、析构tmp
//case3:区分下面两种情形,对比分析
qq = f2(); //构造函数p、拷贝构造函数tmp、析构函数p、赋值=、析构函数tmp
MyPoint pp = f2(); //构造函数p、拷贝构造函数tmp、析构函数p
return 0;
}