首頁 >後端開發 >C++ >C 11 中移出物件的有效性和允許的操作是什麼?

C 11 中移出物件的有效性和允許的操作是什麼?

Linda Hamilton
Linda Hamilton原創
2024-12-06 09:34:12482瀏覽

What are the Validity and Allowable Operations on Moved-From Objects in C  11?

C 11 中移出物件的有效性

理解 C 11 中移出物件的有效性可能很複雜。本文旨在闡明這個概念,特別是在 pimpl 物件的脈絡中。

移自物件

當物件被移出時,其狀態將變得不確定。標準庫定義了標準庫類型的有效性標準,確保移出的物件處於有效但未指定的狀態。但是,對於自訂類型,開發人員有責任定義和記錄移出物件的有效狀態和允許的操作。

範例:Pimpl Idiom

In範例 pimpl 習慣用法中,impl_ 成員指向動態分配。移動操作後,移出物件中的指標將設定為 nullptr。這使得 do_stuff() 方法無效,因為它嘗試取消引用 impl_ 指標。

不變與有效狀態

Foo 物件始終可以 do_stuff 的不變() 移出後不再有效。一般來說,移出的物件可能無法滿足適用於未移動物件的所有不變量。

選項 1:檢查操作

一個選項是明確檢查如果 do_stuff() 中的 impl_ 指標為 nullptr,並在必要時對其進行初始化。但是,這會帶來潛在的效能開銷。

選項 2:定義無效狀態

或者,程式碼可以明確定義移出的 Foo 物件處於無效狀態並且對它們呼叫 do_stuff() 將導致錯誤。

概念與移出物件

需要注意的是,標準函式庫定義的概念並未考慮移出物件。為了滿足概念的要求,自訂類型的移出物件仍然必須滿足概念要求。

結論

理解移出物件的有效性至關重要用於正確實現移動語義。開發人員應仔細考慮移動操作對其物件狀態的影響,並相應地定義預期行為。

以上是C 11 中移出物件的有效性和允許的操作是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn