拷贝构造函数有四种调用时机,这篇文章只示例前两个调用时机:
1.使用赋值操作符方式用一个对象初始化另外一个对象;
2.使用构造函数的方式用一个对象初始化另外一个对象。
#include <iostream>
using namespace std;
class Test4
{
public:
Test4()
{
m_a = 0;
m_b = 0;
cout << "无参构造函数" << endl;
}
Test4(int a)
{
m_a = a;
m_b = 0;
}
Test4(int a, int b)
{
m_a = a;
m_b = b;
cout << "有参构造函数" << endl;
}
Test4(const Test4& obj)
{
cout << "拷贝构造函数" << endl;
m_a = obj.m_a;
m_b = obj.m_b;
}
private:
int m_a;
int m_b;
};
//第一种调用时机:使用赋值操作符方式用一个对象初始化另外一个对象
void first_time()
{
Test4 t0(1, 2);
Test4 t1(1, 2);
//用t1初始化t2,会调用拷贝构造函数
Test4 t2 = t1;
//用t1给t0赋值,赋值操作与初始化是两个不同的概念,此时不会调用拷贝构造函数,而是调用“=”操作符函数,相当于重载。
t0 = t1;
}
//第二种调用时机:使用构造函数的方式用一个对象初始化另外一个对象
void second_time()
{
Test4 t3(1,2);
//用t3初始化t4,会调用拷贝构造函数
Test4 t4(t3);
}
int main(int argc, char const *argv[])
{
first_time();
second_time();
return 0;
}