是以下C++单例实现?

Pho*_*ong 1 c++ singleton coding-style

我确实在网上看到了一些实现单例类的模式如下:

class singleton {
public:
    int a;
    void print()
    {
        std::cout << a << std::endl;
    }
} singleton;

int main()
{
    // singleton b; COMPILATION ERROR
    singleton.a = 3;
    singleton.print();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它确实在GCC上编译,但我觉得将实例命名为类的名称并不是一种正确的编码方式.

  • 是否有禁止此类约定的特殊规则(实例名称与类名相同)
  • 源代码是否在其他编译器中编译?

Joh*_*ing 7

class singleton ss;
Run Code Online (Sandbox Code Playgroud)

你可以构造不止一个,所以这不是一个单身人士.隐藏的名字可以说是邪恶的.单身人员很糟糕,所以不要使用它们.


Che*_*Alf 5

关于你真正要问的两个问题,

  • 是的,C++的概念是在同一范围内共存的不同类型的名称,如C和

  • 是的,当包含适当的标题时,代码可以使用MinGW g ++ 4.4.1,Visual C++ 10.0和Comeau Online 4.3.10.1进行编译.

当您对某些代码段是否符合标准时存在疑问时,实际上只需将其提交给Comeau Online.

然而,代码在技术上是好的并不意味着它没关系...... :-)

Singleton用于描述与全局变量不同的东西.你拥有的是一个全局变量.因此,它不是单身人士.

单身人士的两个基本属性是

  • 有全球唯一的实例,和

  • 该实例是按需创建的.

通常人们想要类似于全局变量但更受控制的东西.一个人想要一个更受控制的实例化顺序,懒惰的创建有助于此.并且想要限制允许的实例数量,通常是

  • 只有一个单一的实例.

后者是使用单例的一个常见原因,例如维基百科关于单身人士的文章将单例描述为"将类的实例化限制为一个对象".但这是一种简单化的观点.有时需要一个特定数量的实例,作为单身人士.例如,对于Python来说,将Python FalseTrue值描述为该bool类型的单例并不罕见.有时人们需要单身(或单身),同时仍允许任意实例化.

在C++中,实现单例的一种特别简单的方法称为Meyers的Singleton.实际上,单例实例是函数中的一个静态变量,它提供对它的访问.这通常与禁止类的一般实例化相结合,例如通过构造函数或所有构造函数private,以及单例访问函数是static成员函数.

干杯&hth.,