最近、ライブラリがデバッグ ビルドではなくリリース ビルドとしてビルドされた場合にのみ現れるバグがありました。ライブラリは、COM ラッパーを使用した .NET dll であり、CoCreateInstance を使用して、アンマネージ C++ アプリで dll からクラスを作成しています。最終的にバグを追跡したところ、シングルトン オブジェクトへのアクセスが原因でした。シングルトン インスタンスを次のように宣言しました。
private static readonly MyObjectType s_instance = new MyObjectType;
次に、次の方法でアクセスしました。
public static MyObjectType Instance
{
get
{
return s_instance;
}
}
これは失敗していました。次のように変更します。
private static MyObjectType s_instance;
public static MyObjectType Instance
{
get
{
if (s_instance==null)
{
s_instance = new MyObjectType();
}
return s_instance;
}
}
問題を修正しました。最初の使用法が機能しなかった理由と、どちらの方法でも欠点があるかどうかについてのアイデアはありますか?
リリース dll は、別のマネージド アプリから完全に使用できるようでした。