を呼び出すexit(
)は、シングルトンのデストラクタで無限ループを引き起こしていますが、これはシングルトンクラスでのみ起こり、他の場所では正常に動作します!これはコードです:なぜSingletonのデストラクタでexit()を呼び出すと無限ループが発生していますか?
#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()
....
gccは無限ループで潜るわけではありませんhttp://coliru.stacked-crooked.com/a/585f9ef22160ed67 –