对象的生存周期

1、临时量

  1. 内置类型生成的临时量为常量,在寄存器中。
  2. 自定义类型生成的临时量为变量,在内存中。
  3. 隐式生成的临时量为常量。

2、临时对象的生存周期

表达式结束

3、临时对象的优化

临时对象的目标:为了生成新的对象

以生成临时对象的方法生成新的对象

引用能提升临时对象的生存周期

CGoods ggood1("good1", 10.1, 20);         //存放在.data段,从程序一开始到结束
int main()
{
	CGoods good3;                        //调用默认构造函数,从调用点到栈帧结束
	CGoods good4(good3);                 //调用拷贝构造函数,从调用点到栈帧结束
	good4 = good3;                       //调用赋值运算符的重载函数

	static CGoods good5("good5", 10.1, 20);    //存放在.data,调用点到程序结束

	CGoods good6 = 10;                  //临时对象的优化
	CGoods good7(10);                   //无优化
	CGoods good8 = CGoods("good8", 10.1, 20);   //调用三个参数的构造函数生成good8

	good6 = 20;                              //表达式结束,对象销毁
	good7 = CGoods(20);                     //显式生成
	good8 = (CGoods)("good8",10.1, 20);      //选取20,显式生成

	CGoods* pgood9 = new CGoods("good9", 10.1, 20);      //在heap上,new开始,delete结束
	CGoods* pgood10 = new CGoods[2];       //动态开辟对象数组,生成两个对象,delete两个析构

	std::cout << "------------------" << std::endl;
	CGoods* pgood11 = &CGoods("good11", 10.1, 20);  //指向临时对象地址,pgood11指向无效地址
	std::cout << "------------------" << std::endl;
	//CGoods* pgood12 = 20;
	CGoods& rgood12 = CGoods("good11", 10.1, 20);     //引用临时对象生成的内存
	std::cout << "------------------" << std::endl;
	const CGoods& rgood13 = 20;                      //隐式生成的临时量为常量,要用const修饰

	delete pgood9;
	delete[] pgood10;

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值