На сайте Джона он имеет очень элегантный синглтон в C #, который выглядит следующим образом:
public sealed class Singleton
{
Singleton()
{
}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly Singleton instance = new Singleton();
}
}
Мне было интересно, как можно было бы написать эквивалент в C ++? У меня есть это, но я не уверен, имеет ли это фактически ту же самую функциональность как тот из Джона. (Кстати, это всего лишь пятничное упражнение, которое не нужно ни для чего особенного).
class Nested;
class Singleton
{
public:
Singleton() {;}
static Singleton& Instance() { return Nested::instance(); }
class Nested
{
public:
Nested() {;}
static Singleton& instance() { static Singleton inst; return inst; }
};
};
...
Singleton S = Singleton::Instance();