C++ 右值引用(rvalue reference)是一種特殊的引用類型,它能夠綁定到右值(即臨時(shí)對(duì)象或者即將被銷毀的對(duì)象)上。C++11 引入右值引用后,帶來了很多重要的改進(jìn)和新特性,包括:
std::forward
函數(shù)模板,我們可以在函數(shù)模板中將參數(shù)完美轉(zhuǎn)發(fā)給另一個(gè)函數(shù),保留參數(shù)的原始類型和值類別(左值或右值)。template <typename T>
void wrapper(T&& arg) {
// 使用 std::forward 轉(zhuǎn)發(fā)參數(shù)
helper(std::forward<T>(arg));
}
class MyClass {
public:
MyClass(MyClass&& other) noexcept {
// 移動(dòng)資源
data_ = other.data_;
other.data_ = nullptr;
}
private:
int* data_;
};
std::move
:std::move
是一個(gè)輔助函數(shù),可以將左值轉(zhuǎn)換為右值引用,從而觸發(fā)移動(dòng)語義。MyClass obj1;
MyClass obj2 = std::move(obj1); // 將 obj1 的資源移動(dòng)到 obj2
delete
,我們可以禁止對(duì)象的拷貝操作,從而避免不必要的資源復(fù)制。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++ 右值引用提供了一種強(qiáng)大的機(jī)制,使得我們能夠編寫更加高效、安全和靈活的代碼。