我做了一個簡單的單例類。 運行測試時,我得到了一些weired結果。C++,單例類的析構函數再次被調用
析構函數被再次調用。
這是結果和我的代碼。
結果:我預計析構函數被調用4次,因爲我叫GetInstance()
4次。 但是 Desctuructor被稱爲5次!
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;
}
這不是一個真正的單身人士,對不對?你的構造函數和析構函數應該是私有的;由GetInstance中的靜態聲明創建的實例應該是唯一的(如果您遵循正確的模式)。 –