Jam*_*lis 5

首先,考虑一下你是否真的需要一个单身人士.

与普通的C++相比,在C++/CX中实现单例的方式没有什么区别.您需要做两件事:(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() { }
    };
}
Run Code Online (Sandbox Code Playgroud)

我已经为单例实例使用了本地静态变量,以避免命名空间范围的静态初始化排序问题.Visual C++还不支持C++ 11的线程安全静态初始化,所以如果您可能正在使用来自多个线程的单个实例,您要么考虑使用命名空间范围的静态变量并处理任何潜在的初始化排序问题,或者您需要调查同步初始化.