#include <iostream>
template<typename T>
class SingletonTemplate {
public:
SingletonTemplate() {
std::cout << "In SingletonTemplate Construct" << std::endl ;
}
public:
static T& Instance() {
if(m_pInstance == NULL) {
m_pInstance = new T ;
}
return *m_pInstance ;
}
private:
SingletonTemplate<T>* operator = (const SingletonTemplate<T>*) {}
private:
static T* m_pInstance ;
} ;
template<typename T>
T* SingletonTemplate<T>::m_pInstance = NULL ;
class CB {
public:
CB() {
std::cout << "In CB Construct" << std::endl ;
}
~CB() {
std::cout << "In CB DeConstruct" << std::endl ;
}
void PrintFun() {
std::cout << "value of m_i:" << m_i << std::endl ;
}
void SetI(int value) {
m_i = value ;
}
int GetI() {
return m_i ;
}
private:
int m_i ;
} ;
class CA {
public:
SingletonTemplate<CB> m_CBInstance ;
} ;
class CC {
public:
SingletonTemplate<CB> m_CBInstance ;
} ;
template<typename T, size_t size>
class TT {
public:
TT() {
std::cout << "In TT Construct, size:" << size << std::endl ;
}
} ;
class CTestCC {
public:
SingletonTemplate<TT<char, 1024> > m_ccInst ;
} ;
class CTestCC2 {
public:
SingletonTemplate<TT<char, 1024> > m_ccInst_char_1024 ;
SingletonTemplate<TT<char, 128> > m_ccInst_char_128 ;
SingletonTemplate<TT<int, 128> > m_ccInst_int_128 ;
} ;
int main(int argc, char** argv) {
CA* p_ca = new CA() ;
CB* ptr = &p_ca->m_CBInstance.Instance() ;
ptr->SetI(10) ;
CC* p_cc = new CC() ;
p_cc->m_CBInstance.Instance() ;
std::cout << "Print By p_ca, i:" << p_ca->m_CBInstance.Instance().GetI() << std::endl ;
std::cout << "Print By p_cc, i:" << p_cc->m_CBInstance.Instance().GetI() << std::endl ;
delete p_ca ;
p_ca = NULL ;
delete p_cc ;
p_cc = NULL ;
std::cout << "Print By ptr, i:" << ptr->GetI() << std::endl ;
CTestCC* p_testcc = new CTestCC() ;
TT<char, 1024>* p_tt = &p_testcc->m_ccInst.Instance() ;
CTestCC2* p_testcc2 = new CTestCC2() ;
TT<char, 1024>* p_char_1024 = &p_testcc2->m_ccInst_char_1024.Instance() ;
TT<char, 128>* p_char_128 = &p_testcc2->m_ccInst_char_128.Instance() ;
TT<int, 128>* p_int_128 = &p_testcc2->m_ccInst_int_128.Instance() ;
return 0 ;
}
/*
In SingletonTemplate Construct
In CB Construct
In SingletonTemplate Construct
Print By p_ca, i:10
Print By p_cc, i:10
Print By ptr, i:10
In SingletonTemplate Construct
In TT Construct, size:1024
In SingletonTemplate Construct
In SingletonTemplate Construct
In SingletonTemplate Construct
In TT Construct, size:128
In TT Construct, size:128
*/
把Singleton作为类的成员变量
最新推荐文章于 2022-02-15 15:41:02 发布