2

C++/CX でシングルトン クラスを作成するにはどうすればよいですか?

4

2 に答える 2

5

まず、本当にシングルトンが必要かどうかを検討します。

通常のC++とは対照的に、C ++/CXでシングルトンを実装する方法に実際の違いはありません。2つのことを行う必要があります。(1)複数のインスタンスの構築を防ぐこと、および(2)オブジェクトの単一のグローバルインスタンスへのアクセスを提供することです。

簡単な例を次に示します。

namespace Component
{
    public ref class Singleton sealed
    {
    public:

        static property Singleton^ Instance
        {
            Singleton^ get()
            {
                static Singleton^ instance = ref new Singleton();
                return instance;
            }
        }

    private:

        Singleton() { }
    };
}

名前空間スコープの静的初期化順序の問題を回避するために、シングルトンインスタンスにローカル静的変数を使用しました。VisualC++はまだC++11のスレッドセーフな静的初期化をサポートしていないため、複数のスレッドから単一のインスタンスを使用している可能性がある場合は、名前空間スコープの静的変数を使用し、潜在的な初期化の順序を処理することを検討してください。問題が発生した場合、または初期化の同期を調査する必要があります。

于 2012-05-22T17:50:13.830 に答える
0

これを行う方法は、NULL に初期化されたシングルトン クラスへのポインターの静的変数とプライベート コンストラクターを用意することです。次に、静的な Create(...) メソッドを使用してインスタンスを構築します。静的 Create メソッドで、静的変数をチェックし、NULL の場合にのみインスタンスを構築します。

class Foo
{
  public:
    Foo* Create();
  private:
    Foo(); //private ctor
    static Foo* M_ClassDataP;
};

Foo* Foo::M_ClassDataP = NULL; //initialize class data ptr to null

Foo* Foo::Create()
{
    if (NULL != M_ClassDataP)
    {
        M_ClassDataP = new Foo();
    }
    return M_ClassDataP;
}
于 2012-05-22T02:08:38.493 に答える