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; }</code>
このコードの出力は次のとおりです。
At begin of main. creating std::vector<std::shared_ptr<void>> Creating test Test created Leaving scope Leaving main Test destroyed
型消去について理解する
この動作の鍵は、によって実行される型の消去にあります。 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 中国語 Web サイトの他の関連記事を参照してください。