【c++八股文】Day4:右值,右值引用,移动语义

我们现在来从问题出发讲清楚:


右值引用是为了解决什么问题而引入的?


✅ 一、从根本问题出发:传统 C++ 的性能瓶颈

在 C++98/C++03 中,对象的传递和返回一般依赖:

  • 拷贝构造函数(const T& + T(const T&)
  • 拷贝赋值运算符

📌 举例:

std::string getStr() {
   
   
    std::string s = "hello";
    return s;  // 返回时发生拷贝(或被优化)
}

std::string str = getStr();  // 可能拷贝

❌ 问题:

  • s 是一个即将销毁的临时变量,它的资源完全可以被“偷走”而不是复制
  • 拷贝会导致堆内存复制,非常低效!

✅ 二、我们需要一种方法 —— 区分“能偷资源”和“不能偷”的对象

于是,C++11 引入了:

👉 右值引用(T&&)

它可以绑定将亡值(xvalue),即即将销毁的对象,允许程序安全地“偷走资源”,实现所谓的:

🔥 移动语义(Move Semantics)


✅ 三、右值引用能做什么?

右值引用的核心使命是:支持 移动构造移动赋值,避免不必要的深拷贝。


🔍 四、具体例子演示「拷贝」与「移动」的差异

class Buffer {
   
   
public:
    int* data;
    size_t size;

    Buffer(size_t sz) : size(s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值