C++:你真的了解匿名对象的生命周期吗?

初步了解匿名对象生命周期

不知道有没有人和我一样,在vector的模拟实现部分对于resize接口的实现有一些疑问。
在这里插入图片描述

void resize(size_t n , const T& val = T())
{
	if (n > size())
	{
		reserve(n);
		for (size_t i = size(); i < n; i++)
			push_back(val);
	}
	else
	{
		_finish = _start + n;
	}
}

1. 提出问题

1.在实现resize的时候,使用了匿名对象作为缺省值,并且使用引用来进行接收
  我们学习过匿名对象,匿名对象的生命周期只在当前行
  为什么引用的匿名对象还可以在函数体内继续使用
2.对于int,double等内置类型,它们是否也有匿名对象?

2. 模拟验证

我们通过以下几个简单的样例来模拟当时的场景:

只有匿名对象:
此时其生命周期只有当前一行
在这里插入图片描述

匿名对象被const &接收:
此时该匿名对象的生命周期为到其所属作用域。
在这里插入图片描述

匿名对象作为缺省值:
此时该匿名对象存储在该函数的栈帧中,直到出了该函数作用域才会销毁。
在这里插入图片描述

匿名对象被静态成员变量引用:
此时该匿名对象的生命周期结束为整个程序结束时。
在这里插入图片描述

3. 得出结论

通过查阅资料以及上述的验证我们可以对问题得出初步结论:

1.int,double等内置类型在有了函数模板后进行了升级,它们有了匿名对象从而可以支持函数模板所给的缺省值。
2.如果匿名对象被const &接收,则其生命周期和存储位置与引用它的变量相同,这样可以改变匿名对象的生命周期。

对于匿名对象的更深层次了解需要和右值引用相结合,在学习到右值引用时再来更多了解学习匿名对象。

以上是本次所有内容,希望有所帮助,谢谢观看。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值