关于构造函数与拷贝构造函数的问题

构造函数: 在类定义时,首先被调用的函数。

拷贝构造函数:其本质是构造函数的一种,因其功能多被用来做类的拷贝所以取名:拷贝构造函数,同样是在类创建时调用。

 

而恰恰是因为  拷贝构造函数是构造函数的一种(重载),因此若声明或者说实例化类时,若调用了拷贝构造函数就不会再调用构造函数

这里的问题就出现了,如果在 构造函数 中原本对一个头节点分配了内存,并且在此头节点基础上进行链表的操作如 添加节点,那么在拷贝构造

函数中就不能执行这操作,因为使用拷贝构造的这个新创建的类的实例没有经过构造函数的初始化。

 

我尝试在拷贝构造函数中显式调用构造函数,发现这种方法不能通过,因为调用构造函数后立刻就调用了析构函数。

 

这是一个测试小例子:

# 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;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值