Singleton构造函数与get_instance()分离
Singleton constructor separated from get_instance()
在典型的单例中,第一次调用getInstance()时会调用构造函数。我需要的是将init和getInstance函数分开。init函数必须使用构造函数创建实例,并且只有在调用了init函数的情况下才能使用getInstance(否则会引发异常)。我该怎么做?
Singleton::init(required argument); //calls constructor
Singleton::getInstance(); //only possible if init had been called, otherwise throws exception
在init方法中设置一个bool,表示init成功。在getInstance方法中,如果异常为false,则抛出异常。
您可以将它作为静态私有成员存储在类中。
#include <iostream>
class Single
{
public:
static void init(int x)
{
single.number = x;
inited = true;
}
static Single & GetInstance()
{
//Do exception stuff here....
if(inited)
{
std::cout << "Inited" << std::endl;
}
else
{
std::cout << "NOT Inited" << std::endl;
}
return single;
}
void printTest()
{
std::cout << single.number << std::endl;
}
private:
Single() : number(5)
{
std::cout << "Construction " << std::endl;
}
int number;
static bool inited;
static Single single;
};
bool Single::inited = false;
Single Single::single;
int main()
{
std::cout << "Entering main" << std::endl;
Single::GetInstance();
Single::init(1);
Single::GetInstance().printTest();
}
程序输出:
Construction
Entering main
NOT Inited
Inited
1
相关文章:
- C++ Singleton - Prevent ::instance() to variable
- C++:如何读取分离变量,然后读取向量
- 分离一个静态常量 std::thread?
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 如何在 c++ 中将数据与文件流分离
- 为什么堆栈和堆在内存中分离得如此之多?
- 具有可分离内核的 2D 模糊卷积
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 我可以将QCoreApplication::instance()用于孤儿QObjects吗?
- 防止编译器分离函数的指令
- 分离库的主机端和 CUDA 设备端版本
- C++将文件行分离为String和Int
- 分离类所有权和使用,生成最佳(快速)代码
- 动态空间分离C++程序中的输入
- 如何从几乎排序的链表中分离放错位置的元素?
- 检查分离的线程是否还活着?
- 真的需要在 .h 和 .cpp 文件中分离 c++ 结构吗?
- 为什么分离线程没有得到输出消息
- 将偶数和奇数随机数分离并打印出来