通常のポインタのみを使用する、かなり大きなレガシーアプリケーションがあります。 今、私は新しいモジュールを追加しています。より現代的なものを使用しようとしています。スマートポインタ。ポインタとshared_pointerを使用すると、削除時にアクセス違反が発生する
メインモジュールは、通信DLLを介して新しいサブモジュール(通常のポインタを使用)にメッセージを送信します。 私の新しいサブモジュールでは、メッセージ処理のためにshared_pointerを使用しています。 共有ポインタがポインタを削除しようとすると、VTableポインタが0xddddddddなので、メッセージのデクストラクタでアクセス違反が発生します。私は既にthis SO questionを見つけました。これは、ポインタがすでにリリースされているためです。
共有ポインタが削除する前に、メインモジュールがすでに通常のポインタを削除しているようです。
私は古いメインモジュールで共有ポインタを使用したくないですが(現時点では非常にリファクタリングしていますが)、アプリケーションで通常のポインタと共有ポインタの両方をどのように使用できるのかを解決する方法はありますか? デストラクタの通常のNULLチェックは役に立ちません。
これは、従来のアプリケーションを改善するときに何をすべきかを理解するのに役立ちました。しかし、私は問題を絞り込んで、それは私のサブモジュールに問題があるようです。 – Simon
@サイモン:いいえproblem.Wishあなた運が:) –