C++错误学习之拷贝构造函数
这是小编第一次接触拷贝构造函数,对于一个新概念,我总希望得到一个特别的解释,对于我来说,只有这样才能印象深刻.
Code
|
|
Error
|
|
结果输出: 12345Dog::Dog(),g_dog_counter=1GrobalFunction()Dog::~Dog(),g_dog_counter=0Dog::~Dog(),g_dog_counter=-1Dog::~Dog(),g_dog_counter=-2
这个结果很奇怪,构造函数和析构函数没有一一对应.
Analysis
理想的最终结果是g_dog_counter=0.
第一行输出:dog1的构成函数
第三行输出:GrobalFunction函数类构造了一个对象,但是没有使用默认构造函数构造,却使用了默认的析构函数
第四行输出:dog1的析构函数
第五行输出:dog2的析构函数
那么是谁在GrobalFunction函数里构造了对象了?
答案是拷贝构造函数:Dog(const Dog& dog)
在Dog类加入如下代码: 12345Dog(const Dog& dog) { g_dog_counter++; cout<<"Dog::Dog(const Dog& dog)"<<endl; }
会得到如下结果: 1234567Dog::Dog(),g_dog_counter=1Dog::Dog(const Dog& dog)GrobalFunction()Dog::Dog(const Dog& dog)Dog::~Dog(),g_dog_counter=2Dog::~Dog(),g_dog_counter=1Dog::~Dog(),g_dog_counter=0
这才是我们理想中的结果.
Summary
纯粹是为了引入拷贝构造函数这个概念.