Visual Studio 2015 中編譯器錯誤C2280「嘗試引用已刪除的函數」
Visual Studio 2015 編譯器與其2013 的前身不同,自動為定義移動建構函式或移動賦值運算子的類別產生刪除的複製建構函式。 C 標準強制執行此行為,以防止在首選移動的情況下發生意外複製。
在您的程式碼片段中,類別 A 有一個移動建構函式 A(A &&),這又意味著刪除的副本建構函式按照標準。因此,main 中的新 A(a) 表達式會觸發錯誤 C2280。
要解決此問題,您可以在 A 中明確聲明複製建構子:
class A {
public:
A() {}
A(A &&) {}
A(const A&) = default; // Explicitly declare the copy constructor as defaulted
};
或者,如果您確實打算停用複製而只允許移動,則可以將複製建構函式和複製賦值運算子宣告為已刪除:
class A {
public:
A() {}
A(A &&) {}
A(const A&) = delete;
A& operator=(const A&) = delete; // Delete copy assignment operator
};
請記住,如果您選擇停用複製,您還需要聲明移動賦值運算子和析構函數以符合五法則。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3