大きなクローズド ソース アプリケーション用のプラグイン (dll として実装) を維持しています。これは何年もうまく機能しています。ただし、SDK の最新の更新では、ベンダーがグローバル オペレーター new および delete をオーバーロードしました。これは私に多くの問題を引き起こします。何が起こるかというと、プラグインが文字列を割り当てます。この文字列を、それを変更する静的にリンクされたライブラリに渡します (長さを変更して再割り当てします)。アプリケーションがクラッシュします。
その理由はもちろん、文字列がベンダーによって割り当てられたカスタム ヒープに存在するためです。静的にリンクされたライブラリは、このヒープについて何も認識せず、そのメモリでデフォルトの new/delete 演算子を使用しようとします。ブーム。
問題は、コードをクリーンに保ち、ベンダーの演算子を使用しないようにするにはどうすればよいかということです。条件付きプリプロセッサ マクロはありません。プラグインに必要な 2000 行以上のコードが含まれているため、問題のあるヘッダーを含めることは避けられません。提供されたアロケーターを他のライブラリーに渡すことはできません。そのためのメカニズムが提供されていないためです。私はすでにそれについてベンダーに盗聴しました。他に何を試すことができるかわかりませんか?
補遺:いくつかの激しい議論の後、私はベンダーに、SDK の次のバージョンからオーバーロードを再度削除するよう説得することができました。現在の SDK をハッキングしてオーバーロードを手動で削除するだけで、差し迫った問題を解決できました。このスレッドのすべての提案に感謝します。それらは引数として機能し、オーバーロードが最初に悪い考えであった理由のさらなる「証拠」として機能しました。