试图学习 lvalue
、rvalue
及它们的内存分配。然而,有很多混乱的学习材料。
rvalue
是一种仅在创建它的表达式范围内需要存在的值(至少在C++11之前是这样)。因此,它有一个地址和占用的一块内存。但根据定义,我们不能获取rvalue
的地址,因为它是一个临时对象,与lvalue
相反。然而,即使在C++11之前,我们也能通过将其从函数返回并保存到const引用类型中来获取rvalue
的地址(嗯,我想不是地址,而是值)。
那么,更准确地说,rvalue
的分配是如何工作的?程序或操作系统真正记住了rvalue
创建的内存位置以及标记为已分配的时间有多长,以至于另一个对象不能取代它?
从我的角度来看,现在rvalues
的存储方式就像lvalues
一样,只是我们有其他访问它们的权利。它们有其他类型的释放方式-对于lvalues
,当超出作用域时释放;对于rvalues
,可能通过存在于表达式边界或者没有更多链接到它的方式进行优化释放。