C ++ 11中的Singleton使用成员函数说明符

时间:2014-01-20 10:48:01

标签: c++11 vector singleton

我知道issues with the Singleton Pattern,但是我想使用C ++ 11成员函数说明符来创建一个Singleton来练习C ++ 11。

无论如何,我到目前为止:

#include<new>
#include<vector>

class Singleton
{
    private:
        Singleton() = default; 
        ~Singleton() = default; 

    public: 

        Singleton(const Singleton&) = delete;  
        Singleton& operator=(const Singleton&) = delete;

        void* operator new(std::size_t) = delete;
        void* operator new[](std::size_t) = delete;

        void operator delete(void*) = delete;
        void operator delete[](void*) = delete;

        static const Singleton& getInstance()
        {
            static Singleton mySingleton;

            return mySingleton; 
        }
};


int main(int argc, const char *argv[])
{
    const Singleton& s1 = Singleton::getInstance(); 

    // Why does this compile?
    std::vector<Singleton> v1; 
    // Or this?
    std::vector<Singleton> v2(50); 


    return 0;
}

我的问题是,为什么这些行:

std::vector<Singleton> v1; 

std::vector<Singleton> v2(50);

编译,而不是报告私有上下文中的默认Singleton构造函数的错误吗?

我在64位Linux机器上使用gcc 4.8.2,代码也编译here

1 个答案:

答案 0 :(得分:0)

您的代码不使用getInstance之外的Singleton的默认构造函数,因为向量是空的。