I asked a question about singleton implementation a few minutes ago, I've got very good answer from @LightnessRacesinOrbit.
But I cannot understand why in the next example if I instantiate Singleton
in variable inst
its destructor called twice?
#include <iostream>
class Singleton
{
public:
~Singleton() { std::cout << "destruction!\n"; }
static Singleton& getInstance()
{
static Singleton instance;
return instance;
}
void foo() { std::cout << "foo!\n"; }
private:
Singleton() { std::cout << "construction!\n"; }
};
int main()
{
Singleton inst = Singleton::getInstance();
inst.foo();
}
Output:
construction!
foo!
destruction!
destruction!
To be more correct, I understand why it is called twice. But I cannot understand how it can be called twice if after first destructor the instance of the class was destroyed? Why there is no exception?
Or it was not destroyed? Why?