Lidström氏の主張は、構成shared_ptr<Base> p(new Derived);
はBaseに仮想デストラクタを必要としないというものです。
Armen Tsirunyan:「本当に?shared_ptrは正しくクリーンアップされますか?この場合、その効果をどのように実装できるかを示していただけませんか?」
DanielLidström:「shared_ptrは独自のデストラクタを使用してConcreteインスタンスを削除します。これはC ++コミュニティではRAIIと呼ばれます。RAIIについてできる限りのことを学ぶことをお勧めします。これにより、C ++コーディングが非常に簡単になります。あらゆる状況でのRAII。」
Armen Tsirunyan:「RAIIについて知っています。また、pnが0に達すると、最終的にshared_ptrデストラクタが保存されたpxを削除する可能性があることも知っています。しかし、pxに静的型ポインタ
Base
と動的型ポインタがあるDerived
場合Base
、仮想デストラクタがない限り、これは未定義の動作になります。間違っている場合は修正してください。」DanielLidström:「shared_ptrは静的型がConcreteであることを知っています。コンストラクターに渡したので、これを知っています。魔法のように見えますが、設計によるものであり、非常に優れていると確信できます。」
だから、私たちを判断してください。ポリモーフィッククラスに仮想デストラクタを持たせることなく、shared_ptrを実装することはどのように可能ですか?前もって感謝します