为什么单例在这里工作,尽管静态变量被重新初始化为 NULL
Why the singleton works here, although a static variable is re-initialized to NULL?
在此示例中,我希望每次都将实例重新初始化为NULL。因此,它不应该工作,它应该每次都做新的。但是,它实际上作为单例工作。因此,新的只被调用一次。为什么有效?我在这里很困惑。
class Factory_model
{
public:
static Factory_model* Instance(void);
};
Factory_model* Factory_model::Instance(void)
{
static Factory_model* instance = NULL;
if(instance == NULL)
{
qDebug()<< "Creating instance now"<<endl;
instance = new Factory_model;
}
return(instance);
}
int main(int argc, char *argv[])
{
Factory_model *ptr = Factory_model::Instance();
Factory_model *ptr2 = Factory_model::Instance();
Factory_model *ptr3 = Factory_model::Instance();
}
输出如下 -立即创建实例
不,静态我预计每次实例都会重新初始化为 NULL。
变量只初始化一次,程序第一次到达定义时(或者更早,如果像这里一样,它可以静态初始化)。
当然,你有一个内存泄漏,对象创建不是线程安全的;但这不是另一篇关于单例反模式的危险的文章的地方。
行:
static Factory_model* instance = NULL;
只执行一次;这就是关键字 static
在局部变量上使用它时的含义。 每次输入函数时都不会执行初始化。
请参阅 static 关键字及其在C++或 http://www.cprogramming.com/tutorial/statickeyword.html 中的各种用法
另外,看看这个:
声明为 GetInstance 方法的静态变量的单一实例
。每次涉及C ++静态变量和单例时,这是您应该知道的技术
static Factory_model* instance = NULL;
创建一个名为 instance
的静态存储持续时间变量,并将其初始化一次。您是对的,因为每次都会初始化没有 static
关键字的变体,但static
在这里有所不同。
实际上与您在函数外部声明它相同,但具有最小化范围(可以看到变量的内容)的额外好处。在函数内创建静态存储持续时间变量意味着只有函数才能看到/使用它(在发布指针或引用它时没有任何棘手之处),并且它在函数调用中保持其值。
相关文章:
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- C++,检查当我无法使用 NULL/0 时是否初始化了变量
- 链表指向 NULL,尽管我已经初始化了这个链表
- = NULL,在 c++98 中初始化非静态数据成员
- 指针类成员在通过类方法初始化后保持 NULL
- 如何将 cin>> 与初始化的字符* 一起使用为 NULL
- 初始化数组中的每个变量以'0'与将它们全部初始化为 null 相同吗?
- 用null C 初始化结构阵列
- 正在初始化指向null的专用指针数组
- C++:无法通过传递给查找器函数来重新分配 null 初始化的对象指针
- ConstexPR 用于派生类中的 null 初始化构造函数
- std::队列初始化与 NULL
- 未初始化的矢量指针不为NULL
- 使用构造函数初始化指向双击列表中NULL的指针
- 初始化char数组以容纳非null终止的字符串
- 如何用NULL(c++)初始化对的向量
- 如何初始化指向null的指针
- 初始化对话框后,子对话框的 hWnd 将重置为 NULL。
- 将char数组初始化为字符串值时,未初始化的索引被设置为null
- 指针初始化:何时给初始化的指针赋NULL值