调用拷贝构造函数的时机

调用拷贝构造函数的情形

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以 值传递的方式传入 函数体
2) 一个对象作为函数返回值,以 值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行 初始化(常称为 赋值初始化);

#include<iostream>
using namespace std;


class Position
{
private:
	int x;
	int y;
public:
	Position(){}
	Position(int x, int y) :x(x), y(y)
	{
		cout << "Position(int x, int y), x = " << x << ", y = "<< y << endl;
	}
	~Position()
	{
		cout << "~Position(), x = " << x << ", y = " << y << endl;
	}
	Position(const Position&p)
	{
		cout << "Position(const Position&p)" << endl;
		this->x = p.x;
		this->y = p.y;
	}
	Position & operator=(const Position&p)
	{
		cout << "Position & operator=(const Position&p)" << endl;
		this->x = p.x;
		this->y = p.y;
		return *this;
	}
};
Position testCopyFunction()
{
	Position p(1, 2);//调用构造函数
	return p;//返回调用拷贝构造函数把局部对象p复制给一个内存中分配的临时的匿名对象上作为函数的返回值
	//函数结束后释放p的内存,调用析构函数
	//场景4
}
int main(int argc, char* argv[])
{
	Position p;

	p = testCopyFunction();//调用拷贝构造操作符完成复制
	//完成赋值后,临时变量的使命就完成了,调用析构函数释放临时变量的内存

	Position p1 = p;//场景一:
	Position p2(p1);//场景二:
	//场景三是传参:略



	Position(101, 102);//调用完构造函数后立马调用析构函数

	Position p3 = Position(3,4);//相当于 Position p3(3,4)
	return 0;
}



运行结果:

Position(int x, int y)
Position(const Position&p)
~Position()
Position & operator=(const Position&p)
~Position()

//----------------------------------

Position(const Position&p)
Position(const Position&p)
~Position()
~Position()
~Position()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值