std::shared_ptr
調查圍繞著 std::shared_ptr
<code class="cpp">#include <memory> #include <iostream> #include <vector> int main() { std::cout << "At begin of main.\ncreating std::vector<std::shared_ptr<void>>" << std::endl; std::vector<std::shared_ptr<void>> v; { std::cout << "Creating test" << std::endl; v.push_back(std::shared_ptr<test>(new test())); std::cout << "Leaving scope" << std::endl; } std::cout << "Leaving main" << std::endl; return 0; }
程式碼顯示以下輸出:
At begin of main. creating std::vector<std::shared_ptr<void>> Creating test Test created Leaving scope Leaving main Test destroyed</code>
理解類型擦除
此行為的關鍵在於執行的類型擦除std::shared_ptr。當初始化一個新實例時,std::shared_ptr 儲存一個內部刪除器函數。預設情況下,函數在銷毀shared_ptr 時呼叫delete 運算子。此機制可確保在適當的時間呼叫所指向物件的析構函數,無論shared_ptr 的類型為何。
強制轉換的結果
強制轉換std ::shared_ptr;到std::shared_ptr
標準合規性和未來影響
關於此技術的保證行為,至關重要請注意,std::shared_ptr 的內部實現可能因不同的編譯器和平台而異。雖然類型擦除一直是shared_ptrs的一個基本方面,但未來對其實現的更改可能會影響所描述的功能。
因此,不建議僅依賴此行為,並且應在生產程式碼中避免這種做法。相反,替代方法(例如使用 std::function 或自訂刪除器類別)更加健壯,並且將在各種實作中提供一致的行為。
以上是儘管類型擦除,“std::shared_ptr”如何保留物件銷毀行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!