首頁 > 後端開發 > C++ > `std::unique_ptr` 需要 T 的完整定義嗎?

`std::unique_ptr` 需要 T 的完整定義嗎?

Barbara Streisand
發布: 2024-12-25 14:10:15
原創
935 人瀏覽過

Does `std::unique_ptr` Need a Complete Definition of T?

是 std::unique_ptr需要知道 T 的完整定義嗎?

std::unique_ptr 是嗎?需要有它所管理的類型 T 的完整定義嗎?這個問題源自於 std::unique_ptr 的觀察。當事物被前向宣告時,無法在 Visual Studio 2010 SP1 中編譯。

Visual Studio 2010 SP1 中的實作相關行為

Visual Studio 2010 SP1 中的行為顯示它的 std::unique_ptr 實作需要 Thing 的完整定義。這不是標準要求,而是特定於實現的選擇。

標準庫中的部分異常

雖然大多數 C 標準庫模板需要完整類型,但 std ::shared_ptr 和 std::unique_ptr 是部分例外。它們的一些函數可以用不完整的類型實例化,因為它們在支援諸如指向實現的指標(pimpl)模式之類的習慣用法中發揮作用。但是,在某些操作中使用不完整類型可能會導致未定義的行為,例如刪除不完整的物件。

不同操作的型別完整性要求

std::unique_ptr 和std::shared_ptr 在不同情況下需要完整的型別。例如, ~std::unique_ptr 需要其析構函數使用完整型別,而 std::unique_ptr(A*) 如果從中接管指針,則允許使用不完整型別。表格總結了這些要求:

Operation std::unique_ptr std::shared_ptr
Default constructor incomplete incomplete
Copy constructor - incomplete
Move constructor incomplete incomplete
Destructor complete incomplete
Constructor from pointer incomplete complete
Copy assignment - incomplete
Move assignment complete incomplete
Reset without argument complete incomplete
Reset with argument complete complete

總之,雖然std::unique_ptr 本身並不需要C 標準中的完整類型定義,但某些實現(如Visual Studio 2010 SP1)可能會強加這樣的要求。重要的是要了解所使用的實現的具體要求,以避免未定義的行為。

以上是`std::unique_ptr` 需要 T 的完整定義嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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