这可以被视为 C++ 中单例 class 的有效实现吗?

Can this be considered as a valid implementation of singleton class in C++?

#include <iostream>
using namespace std;

class Singleton {
public:
    int val;
    static int count;
    Singleton() {
        if (count == 1) throw 0;
        Singleton::count++;
        val = 100;
    }
};

int Singleton::count = 0;

int main () {
    try {
        Singleton a, b;
    } catch (...) {
        cout << "error\n";
    }
    return 0;
}

所以我们统计创建对象的个数,当计数快要超过1时从构造函数中抛出。从构造函数中抛出会中止对象的创建吗?

C++11及以上:

您将构造函数设为私有并在静态函数中定义静态实例。它同步构造,因此无论有多少线程尝试访问它,对象都只构造一次:

class Singleton {
private:
    Singleton() { /* ... */ }

public:
    static auto& instance() {
        static Singleton singleton;
        return singleton;
    }
};

C++11 之前的版本:

在 C++11(C++03、C++98)之前,没有同步对象构造的标准方法。您需要使用 OS 特定的技巧才能使其正常工作。

如果你是单线程程序,不关心同步问题,可以使用上面相同的版本。