我们现在来从问题出发讲清楚:
✅ 右值引用是为了解决什么问题而引入的?
✅ 一、从根本问题出发:传统 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


988

被折叠的 条评论
为什么被折叠?



