【发布时间】:2016-11-10 12:08:16
【问题描述】:
在 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 不会陷入无限循环。 coliru.stacked-crooked.com/a/585f9ef22160ed67
标签: c++ singleton infinite-loop destructor