用一段代码记录下 拷贝构造、operator=的调用时机
class A
{
public:
A() {} //无参构造
A(A& __T1) //拷贝构造 调用情形: 1)一个对象作为函数参数,以值传递的方式传入函数体;
{ // 2)一个对象作为函数返回值,以值传递的方式从函数返回;
// 3)一个对象用于给另外一个对象进行初始化(常称为赋值初始化);
if(m_pValue == nullptr)
{
m_pValue = new int;
m_pValue = __T1.m_pValue;
}
else
m_pValue = __T1.m_pValue;
}
A& operator =(const A& __T2) //重载operator= 操作符
{
if(m_pValue == nullptr)
{
m_pValue = new int;
m_pValue = __T2.m_pValue;
}
else
m_pValue = __T2.m_pValue;
return *this;
}
private:
int *m_pValue = nullptr;
};
class Test
{
public:
Test() {
A a1; //执行无参构造
A a2 = a1; //一个对象用于(a1)给另外一个对象进行初始化(a2) a2 执行拷贝构造
A a4 = test(a2); //函数传参:a2->a3执行拷贝构造 函数中return a3执行拷贝构造 由于a4未定义 故 return a3 用于初始化 a4;
a4 = test(a2); //函数传参:a2->a3执行拷贝构造 函数中return a3执行拷贝构造 由于a4已经定义 故 a4 执行operator= 重载操作符
}
A test(A a3){
return a3;
}
};