I made a simple singleton class. While running test, I got some weired result.
Destructor is called once again.
Here is result and my code.
Result : I expect destructor is called 4 times, because I called GetInstance() 4 times. But Desctuructor is called 5 times!
Start Test
TestClass Constructor
   TestClass Destructor
   TestClass Destructor
   TestClass Destructor
   TestClass Destructor
   TestClass Destructor
singleton.h
#ifndef SINGLETON_H_
#define SINGLETON_H_
#include "basictype.h"
namespace common {
namespace internal {
// Usage :
// MyClass mine = common::internal::Singleton<MyClass>::GetInstace();
// mine.foo();
// This Singleton class is maybe the best one avoiding memory allocation.
// See http://stackoverflow.com/questions/1008019/c-singleton-design-pattern/1008289#1008289
template <typename Type>
class Singleton {
 public:
  static Type& GetInstance() {
    static Type instance;
    return instance;
  }
 private:
  Singleton() {};
  DISALLOW_COPY_AND_ASSIGN(Singleton);
};
}  // namespace internal
}  // namespace common
#endif  // SINGLETON_H_
main.c
#include <iostream>
#include "singleton.h"
class TestClass {
 public:
  TestClass() {
    std::cout << "TestClass Constructor" << std::endl;
  }
  ~TestClass() {
    std::cout << "   TestClass Destructor" << std::endl;
  }
};
void runSingletonTest() {
  TestClass tc = common::internal::Singleton<TestClass>::GetInstance();
  TestClass tc2 = common::internal::Singleton<TestClass>::GetInstance();
  TestClass tc3 = common::internal::Singleton<TestClass>::GetInstance();
  TestClass tc4 = common::internal::Singleton<TestClass>::GetInstance();
}
int main(){
  std::cout << "Start Test" << std::endl;
  runSingletonTest();
  return 0;
}
 
     
     
     
     
     
     
    