C++ 右值引用(rvalue reference)是一种特殊的引用类型,它能够绑定到右值(即临时对象或者即将被销毁的对象)上。C++11 引入右值引用后,带来了很多重要的改进和新特性,包括:
std::forward
函数模板,我们可以在函数模板中将参数完美转发给另一个函数,保留参数的原始类型和值类别(左值或右值)。template <typename T>
void wrapper(T&& arg) {
// 使用 std::forward 转发参数
helper(std::forward<T>(arg));
}
class MyClass {
public:
MyClass(MyClass&& other) noexcept {
// 移动资源
data_ = other.data_;
other.data_ = nullptr;
}
private:
int* data_;
};
std::move
:std::move
是一个辅助函数,可以将左值转换为右值引用,从而触发移动语义。MyClass obj1;
MyClass obj2 = std::move(obj1); // 将 obj1 的资源移动到 obj2
delete
,我们可以禁止对象的拷贝操作,从而避免不必要的资源复制。class NonCopyable {
public:
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;
};
template <typename T>
struct MyType {
using value_type = T;
};
template <typename T, typename U>
void foo(MyType<T>& t, MyType<U>& u) {
// ...
}
总之,C++ 右值引用提供了一种强大的机制,使得我们能够编写更加高效、安全和灵活的代码。