使用移動語義有效擴展向量
處理非平凡物件的向量時,您可能想要強制使用當向量增長時移動構造函數。
在 C 中,向量通常使用複製建構子來實例化擴充時產生新元素。但是,為了利用移動建構函式及其效能優勢,必須明確告知 std::vector 移動建構函式是安全且防異常的。
要實現此目的,請將移動建構函式宣告為 noexcept,確保std::vector 不會拋出例外。例如:
A(A &&rhs) noexcept { // Perform move operations... }
透過確保 noexcept 行為,std::vector 有信心在不違反異常保證的情況下使用移動建構子。
或者,您可以透過聲音明顯式請求預設移動語意:
A(A &&rhs) = default;
此方法將在以下情況下自動產生 noexcept 移動建構函式可能。
但是,如果移動建構子不是 noexcept,則 std::vector 無法呼叫它,因為它無法保證 C 標準的異常安全。
請注意,早期版本的 Visual Studio儘管支援行動語義,2015 及更早版本可能不會完全支援這種方法。
以上是如何使用移動語意有效擴展 C 向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!