How to create a Singleton in C++/CX?
如何在C++/CX中创建一个单独的类?
首先,考虑一下你是否真的需要单身。
在C++和CX中实现单体与普通C++没有什么区别。您需要做两件事:(1)防止构造多个实例;(2)提供对对象的单个全局实例的访问。
下面是一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | namespace Component { public ref class Singleton sealed { public: static property Singleton^ Instance { Singleton^ get() { static Singleton^ instance = ref new Singleton(); return instance; } } private: Singleton() { } }; } |
我为singleton实例使用了一个局部静态变量,以避免命名空间范围的静态初始化排序问题。Visual C++还不支持C++ 11的线程安全静态初始化,所以如果您可以使用多个线程中的单个实例,或者您将考虑使用命名空间范围静态变量,并通过任何可能的初始化排序问题,或者需要研究同步初始化。
我这样做的方法是将指向singleton类的指针的静态变量初始化为空,并使用私有构造函数。然后使用静态create(…)方法来构建实例。在静态创建方法中,检查静态变量,仅当其为空时生成实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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; } |