00001 /* 00002 Free Download Manager Copyright (c) 2003-2007 FreeDownloadManager.ORG 00003 Open Download Manager Copyright (c) 2008-2010 OpenDownloadManager.ORG 00004 */ 00005 00006 #if !defined(AFX_VMSOBJECTSMARTPTR_H__1ECD7954_DB25_4982_A113_4574EA1C10B7__INCLUDED_) 00007 #define AFX_VMSOBJECTSMARTPTR_H__1ECD7954_DB25_4982_A113_4574EA1C10B7__INCLUDED_ 00008 00009 #if _MSC_VER > 1000 00010 #pragma once 00011 #endif 00012 00013 #include "vmsObject.h" 00014 00015 template <class T = vmsObject> 00016 class vmsObjectSmartPtr 00017 { 00018 public: 00019 vmsObjectSmartPtr (const vmsObjectSmartPtr &ptr) 00020 { 00021 m_pObj = NULL; 00022 *this = ptr; 00023 } 00024 00025 vmsObjectSmartPtr(T *pObj = NULL) 00026 { 00027 m_pObj = pObj; 00028 if (m_pObj) 00029 m_pObj->AddRef (); 00030 } 00031 00032 vmsObjectSmartPtr& operator =(const vmsObjectSmartPtr &ptr) 00033 { 00034 if (m_pObj) 00035 m_pObj->Release (); 00036 m_pObj = ptr.m_pObj; 00037 if (m_pObj) 00038 m_pObj->AddRef (); 00039 return *this; 00040 } 00041 00042 virtual ~vmsObjectSmartPtr() 00043 { 00044 if (m_pObj) 00045 m_pObj->Release (); 00046 } 00047 00048 T* operator -> () const {return m_pObj;} 00049 operator T* () const {return m_pObj;} 00050 00051 void CreateInstance () 00052 { 00053 if (m_pObj) 00054 m_pObj->Release (); 00055 m_pObj = new T; 00056 m_pObj->AddRef (); 00057 } 00058 00059 protected: 00060 T *m_pObj; 00061 }; 00062 00063 #endif
1.5.6