最近の議論で、Daniel Lidström は、shared_ptr
仮想デストラクターを使用しない Shared_Ptr の実装
この実装の鍵は型の消去にあります。 Shared_ptr には参照カウンター以上のものが保存されます。これには、オブジェクトの破棄を処理するデリーター (データ構造の一部として保存) が含まれています。このデリーターは任意のタイプにすることができ、T (shared_ptr のテンプレート タイプ) の範囲を超えたカスタマイズが可能です。
派生クラスのカスタマイズ
shared_ptr の作成時< ;ベース> Derived オブジェクトからは、テンプレート化されたコンストラクターが呼び出され、具象型 Derived の指定が可能になります。コンストラクターは、動的型の知識を使用して必要なデリーターを作成し、Base に仮想デストラクターがなくても適切なオブジェクトの破棄を保証します。
実装例
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
上記コンストラクターを使用すると、shared_ptr
C 11 標準の要件
C 11 標準では、次の動作が明示的に要求されています。
以上が「shared_ptr」は、「Base」の仮想デストラクタなしで「派生」オブジェクトを管理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。