构造函数: 在类定义时,首先被调用的函数。
拷贝构造函数:其本质是构造函数的一种,因其功能多被用来做类的拷贝所以取名:拷贝构造函数,同样是在类创建时调用。
而恰恰是因为 拷贝构造函数是构造函数的一种(重载),因此若声明或者说实例化类时,若调用了拷贝构造函数就不会再调用构造函数。
这里的问题就出现了,如果在 构造函数 中原本对一个头节点分配了内存,并且在此头节点基础上进行链表的操作如 添加节点,那么在拷贝构造
函数中就不能执行这操作,因为使用拷贝构造的这个新创建的类的实例没有经过构造函数的初始化。
我尝试在拷贝构造函数中显式调用构造函数,发现这种方法不能通过,因为调用构造函数后立刻就调用了析构函数。
这是一个测试小例子:
# include<iostream>
using namespace std;
class Text
{
private:
int data;
public:
Text()
{
data = 0;
cout << "调用了构造函数" << endl;
}
Text(const Text & tem)
{
Text();
cout << data << endl;
data = tem.data + 1;
cout << "调用了拷贝构造函数" << endl;
cout << data << endl;
}
~Text()
{
cout << "调用了析构函数" << endl;
}
void Display()
{
cout << data << endl;
}
};
int main()
{
Text A;
A.Display();
cout << "分割段" << endl << endl;
Text B(A);
B.Display();
system("pause");
return 0;
}