C++右值引用主要用于支持移動語義和完美轉發,它們在以下場景中非常有用:
class MyClass {
public:
MyClass(MyClass&& other) noexcept {
// 移動資源
}
MyClass& operator=(MyClass&& other) noexcept {
if (this != &other) {
// 釋放原有資源
// 移動資源
}
return *this;
}
};
std::forward函數結合使用,實現參數的完美轉發。這允許我們在函數模板中將參數原封不動地傳遞給另一個函數,保持參數的值類別(左值或右值)不變。template <typename T>
void wrapper(T&& arg) {
// 使用std::forward完美轉發參數
some_function(std::forward<T>(arg));
}
表達式模板:表達式模板是一種優化數學表達式求值的技術。通過使用右值引用,我們可以定義更高效、更靈活的表達式模板。
禁用拷貝構造函數和拷貝賦值運算符:通過將拷貝構造函數和拷貝賦值運算符聲明為刪除(delete),我們可以禁止對象被拷貝。這通常與右值引用一起使用,以確保對象只能通過移動語義進行傳遞。
class NonCopyable {
public:
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;
};