在 Singleton 的析构函数中调用 exit(
) 会导致无限循环,这只发生在 singleton 类中,在其他地方也能正常工作!这是代码:
#include <iostream>
#include <stdlib.h>
class Singleton{
private :
Singleton(){}
public : // public destructor , allow 'delete' or whatever , not our subject
~Singleton()
{
std::cout<<"~Singleton()"<<std::endl;
exit(0);
}
static Singleton * GetInstance()
{
static Singleton s;
return &s;
}
};
int main()
{
// Signleton s; , this is safe when the constructor is public
Singleton::GetInstance(); // this enter an infinate loop
return 0;
}
输出:
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
~Singleton()
....
最佳答案
这不足为奇。
在调用 exit
期间,C++ 运行时调用析构函数来处理所有具有 static
存储的对象。
如果你不能修复这个有问题的设计,那么在析构函数中放一些东西来阻止递归。
关于c++ - 为什么在 Singleton 的析构函数中调用 exit() 会导致无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527253/