out-proc COMサーバーでは、CoRegisterClassObject()
に渡すクラスファクトリが必要です。 CreateInstance()
は、new
を使用してオブジェクトインスタンスを作成し、格納されたデータを必要としません。 LockServer()
は、ファクトリインスタンスに固有の共有ロックカウンタを変更します。グローバルオブジェクトをCOMクラスファクトリとして使用していますか?
実際、私はファクトリ内に別のデータを格納する必要はなく、オブジェクトを1つしか持たないとうまく動作しません。また、私はそのオブジェクトの生涯を世話したくありません。私は(コンストラクタで1に参照カウントを設定して)グローバル変数として工場を宣言するように誘惑だ理由はここにある:
私はdelete this
Release()
内部ではもはや満足していないことをやるたら
//Server.cpp
CMyFactory factory;
- そのコードべき(refcountは1から始まり、決してゼロに達しません)、それが実行されると、未定義の動作につながります。だから私は、工場からの参照カウンタを削除すると、このようAddRef()
とRelease()
の実装を考える:
ULONG CMyFactory::AddRef()
{
return 1;
}
ULONG CMyFactory::Release()
{
return 1;
}
ので参照カウントがちょうど副作用がないだろう、何delete this
はありません。
説明されている実装は合法でしょうか?それは何か問題を引き起こすでしょうか?