c++引用容易犯的错误---引用失效(类似迭代器失效)

记录一下自己笔试时踩的关于引用的坑
  • 平常比较多使用引用,认为能够减少重新构建局部变量的开销,特别是局部变量是一个比较大的对象或者数据结构时。
    但在下面场景下,引用就会出现错误
priority_queue<vector<int>, vector<vector<int>>> q;
while (true) {
		auto& n = q.top();//加了引用
		q.pop();
		dosth(n);//这里的n已经发生变化
}
while (true) {
		auto n = q.top();//没有加引用
		q.pop();
		dosth(n);//操作的是局部变量
}
个人猜想
  • 引用就是引用一个地址上的变量,在上述场景中,执行了pop操作之后,就会存在类似迭代器失效的问题。
  • 因为当前引用的是优先队列内部的一个对象,当执行了pop操作之后,优先队列会执行一些操作去维护这个队列的有序性,因此会对这个地址上的内存进行释放或者改写
  • 如有其他看法也欢迎讨论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值