多態性クラス仮想デストラクターを使用しない Shared_Ptr 実装
shared_ptr 実装における仮想デストラクターの必要性に関する Armen Tsirunyan と Daniel Lidstrom 間の議論では、確かに、そのようなものを必要としないshared_ptrを設計することは可能です。デストラクター。
技術的な実装
この実装の鍵は、型消去にあります。 Shared_ptr はリファレンスカウンタだけでなく、同じメモリブロックに格納されているデリーターオブジェクトも管理します。このデリーターのタイプはshared_ptrのタイプとは異なり、異なる動的タイプのオブジェクトを柔軟に管理できるようになります。
テンプレート化されたコンストラクターが導入されています。
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
派生クラスのポインター (例:shared_ptr
C 11 標準要件
C 11 標準では、このコンストラクターの要件を明示的に定義しています。
デストラクターの場合:
したがって、shared_ptr 実装は型消去を利用し、デリータを慎重に管理してオブジェクトを効果的に破棄します。多態性クラスで仮想デストラクターを必要としなくても、異なる動的型を使用できます。
以上がshared_ptr はポリモーフィック クラス仮想デストラクターなしで動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。