我做了一个简单的单例类。在运行测试时,我得到了一些奇怪的结果。
再次调用析构函数。
这是结果和我的代码。
结果:我希望析构函数被调用 4 次,因为我调用了GetInstance()
4 次。但是Desctructor 被调用了5 次!
Start Test
TestClass Constructor
TestClass Destructor
TestClass Destructor
TestClass Destructor
TestClass Destructor
TestClass Destructor
单例.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_
主程序
#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;
}