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中文網其他相關文章!