右值引用和移动语义

右值引用(Rvalue reference)和移动语义(Move semantics)

左值(lvalue)和右值(rvalue)

左值(也称为 locator value)

  • 是一个可以被修改的存储位置,指向内存中的某个位置
  • 例子:变量、数组元素、解引用指针等

判断左值的方法是:

  • 能够获得这个表达式的引用
  • 或者取地址

右值

C++ 11后(表达式不再简单地分为 左值、右值,看上去比较复杂)

分为2大类:

  1. Glvalue:泛左值
  • lvalue
  • xvalue(expirnig value):即将消亡的值
  1. Prvalue:纯右值
  • xvalue
  • prvalue

l-value


此外,类的数据成员也是左值

还有一个比较常见的是:返回引用的函数

prvalue(纯右值 Pure R-value)


1

右值引用 rvalue ference

普通的引用也被称作:左值引用

与左值引用类似:如果我们要获得一个右值的引用时,我们使用2个引用符号,

有了右值引用,我们就可以在函数调用时,将 左值参数右值参数 分开来。
例如:我们定义了2个重载函数 func

通过重载函数,能够区分出左值引用和右值引用,接下来就可以实现 移动语义

上述代码有问题(在主函数中,定义了 2个 CharBuffer对象,)


拷贝构造函数如下:

这样2个对象的 m_buff 指向的是同一块内存区域,这显然不是我们想要的
而且这个代码还会导致 buf1 和 buf2 对象,在销毁过程中,调用析构函数时,对 m_buff指向的同一块内存区域释放2次,这样会导致异常

因此,我们需要定义自己的拷贝构造函数

posted @   爱新觉罗LQ  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
历史上的今天:
2024-02-26 测试用例
点击右上角即可分享
微信分享提示