可以使类名和对象名相同,服务于单例的机制

时间:2014-09-09 14:44:18

标签: c++

在下面的代码中,我试图通过使类名和对象名相同来为singleton(即具有单个对象的类)服务。

下面的代码中是否有任何缺陷可用于singleton类的目的?

#include <iostream>
using namespace std;

class singleton
{
    private :
        int val;

    public : 
        void set(int a)
        {
            val=a;
        }

        int display()
        {
            return val;
        }
} singleton;


int main()
{
    singleton.set(5);
    cout << "output a = " <<singleton.display()<< endl; 
    //singleton obj;//second object will not be allowed
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您的类型不是单身,因为您可以为其创建任意数量的实例。例如,

auto cpy = singleton;
cpy.set(42);
assert(singleton.display() != cpy.display());

// let's make loads of copies!
std::vector<decltype(singleton)> v(100, cpy); // 100 "singletons"!

但不用担心,你很可能不需要单身人士。