设为首页 加入收藏

TOP

C++再论单例模式
2015-11-21 00:57:38 来源: 作者: 【 】 浏览:1
Tags:单例 模式
#include 
   
     #include <
    windows.h> #include 
    
      std::mutex gmutex; using namespace std; template
     
       class Singleton { public: static Type* GetSingleton() { if (siglen == NULL) { unique_lock
      
        lock(gmutex);//C++11加锁。 if (siglen == NULL) { siglen = new Type(); Type *temp = new Type(); MemoryBarrier(); siglen = temp; } } return siglen; } private: static Type* siglen; }; template
       
         Type* Singleton
        
         ::siglen = NULL; class Text { public: Text() { data = 100; //因为是单例模式,所以唯一会出现申请内存,调用构造 //函数,赋值三个步骤混乱的机会只有在前面的1-2次 //的时候,可惜速度太快了,这种情况发生的概率及其低 //,但是我们的心理要始终明白。 } void Printf() { cout << data=<
         
          ::GetSingleton()->Printf(); return DWORD(0); } private: int data; }; int main() { HANDLE hThread; DWORD threadId; for (int i = 0; i < 10; i++) { hThread = CreateThread(NULL, 0, &(Text::ThreadFunc), (void *)123,0, &threadId); } Sleep(5); cout << ThreadFunc is running!!! << endl; return 0; } #include 
          
            using namespace std; //引用计数的智能指针。 template
           
             class my_auto_ptr { public: my_auto_ptr(Type* p = NULL) :ptr(p) { count = new int[1]; count[0] = 1; } my_auto_ptr(const my_auto_ptr &ma) { count = ma.count; count[0]++; } my_auto_ptr& operator=(const my_auto_ptr &ma) { if (this != &ma) { this->~my_auto_ptr(); count = ma.count; count[0]++; ptr = ma.ptr; } return *this; } ~my_auto_ptr() { if (count!=NULL &&count[0]-- == 1) { cout << ~my_auto_ptr() << endl; delete ptr; ptr = NULL; delete[] count; count = NULL; } } Type* operator->() { return ptr; } Type& operator*() { return *ptr; } private: Type *ptr; int *count; }; int main() { my_auto_ptr
            
              ps(new int(100)); my_auto_ptr
             
               pb(ps); my_auto_ptr
              
                pd; pd = pb; return 0; } 
              
             
            
           
          
         
        
       
      
     
    
   

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇leetcoder-50-Pow(x, n) 下一篇ZOJ1041 Transmitters

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: