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