乐趣区

关于单例模式:C单例模式实现

最不便罕用的是 Meyers’ Singleton,多线程平安。gcc 4.0 之后的编译器反对这种写法,要求 C ++11 及其当前的版本。

class Singleton
{
public:
    // 留神返回的是援用
    static Singleton &getInstance()
    {
        static Singleton instance;  // 动态局部变量
        return instance;
    }

private:
    Singleton() = default;
    Singleton(const Singleton &) = delete; // 禁用拷贝构造函数
    Singleton &operator=(const Singleton &) = delete; // 禁用拷贝赋值运算符
};

残缺的验证程序:

#include <iostream>
using namespace std;

class Singleton
{
public:
    // 留神返回的是援用
    static Singleton &getInstance()
    {
        static Singleton instance;  // 动态局部变量
        return instance;
    }

private:
    Singleton() = default;
    Singleton(const Singleton &) = delete; // 禁用拷贝构造函数
    Singleton &operator=(const Singleton &) = delete; // 禁用拷贝赋值运算符
};

int main()
{Singleton& s1 = Singleton::getInstance(); // & 是援用
    cout << &s1 << endl; // & 是取地址

    Singleton& s2 = Singleton::getInstance();
    cout << &s2 << endl;

    // Singleton s3(s1);

    // s2 = s1;

    system("pause");

    return 0;
}

打印出 s1 和 s2 的地址是同一个,因为是同一个 动态局部变量

退出移动版