-3

まもなくブログに記事を投稿する予定ですが、まず何も見逃していないことを確認したいと思います。

私が見逃した例を見つけてください。投稿で引用します。

トピックは失敗したシングルトン実装です: シングルトンの複数のインスタンスを誤って取得する可能性があるのはどのような場合ですか?

これまでのところ、私は思いついた:

  • への最初の呼び出しでの競合状態instance()
  • 複数の DLL または DLL と実行可能ファイルへの組み込み
  • シングルトンのテンプレート定義 - 実際には個別のクラス

私が見逃している他の方法はありますか?おそらく継承を使用していますか?

4

2 に答える 2

3

cpp ファイルで初期化する静的インスタンス フィールドを使用すると、いくつかの静的/グローバルの初期化でシングルトンのインスタンスを取得しようとすると、複数のインスタンス (およびさらに悪い動作) が取得される可能性があります。これは、コンパイル単位全体の静的初期化の順序が定義されていないためです。

于 2008-09-13T05:57:30.653 に答える
1

ctor が非公開である限り、継承は問題になりません。

ただし、コピー コンストラクターを禁止しないと、ユーザーが意図せずにシングルトン インスタンスをコピーする可能性があります。これを防ぐ最も簡単な方法は、boost::noncopyableから個人的に継承することです。

于 2008-09-13T05:18:05.977 に答える