首頁 > 後端開發 > C++ > C 11 中移出物件的有效狀態是什麼以及如何定義它們?

C 11 中移出物件的有效狀態是什麼以及如何定義它們?

Barbara Streisand
發布: 2024-12-01 18:14:11
原創
384 人瀏覽過

What are the Valid States of Moved-from Objects in C  11 and How to Define Them?

理解C 11 中移出物件的有效狀態

C 11 中的移動語意引入了一個關鍵概念:之後物件的狀態被搬離。然而,移出物件必須滿足的確切條件可能會令人困惑。

pimpl 物件的問題

考慮 pimpl 習慣用法,其中一個類別包裝一個指向實現物件的指標。如果我們從 Foo 物件(包含 std::unique_ptr)移動,之後我們可以用它做什麼?

  • 銷毀或分配給它是安全的。
  • 呼叫成員函數(透過實作指標)是有問題的,因為它可能引用已刪除的成員函數

標準函式庫移出狀態

C 標準定義標準庫類型的移出物件放置在「未指定但有效」的狀態中。狀態。 」這意味著您可以對具有有效前提條件的它們執行操作。

但是,對於非標準類型,您必須定義並記錄移出後允許的有效狀態和操作。

定義pimpl 的有效狀態

在Foo 範例中,我們可以指定從它移動會渲染do_stuff函數無效。請考慮使用「空物件」模式。 FooImpl。其與標準庫函數一起使用可能會導致未定義的行為。

以上是C 11 中移出物件的有效狀態是什麼以及如何定義它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板