我知道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。
答案 0 :(得分:0)
您的代码不使用getInstance之外的Singleton的默认构造函数,因为向量是空的。