X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fbase%2Fsmartptr.h;h=aafecf0eacfc169e8fe8c8872c9ea138023bcad5;hp=c89763e37fe98ed8666ee1593de17ea0d0dcd030;hb=3bad22d5566624804a73b3791980bab2d84c8266;hpb=ae9b6fba0b02b5990fd1635a2154336c5043df02 diff --git a/lib/base/smartptr.h b/lib/base/smartptr.h index c89763e..aafecf0 100644 --- a/lib/base/smartptr.h +++ b/lib/base/smartptr.h @@ -43,21 +43,21 @@ public: } ePtr &operator=(T *c) { + if (c) + c->AddRef(); if (ptr) ptr->Release(); ptr=c; - if (ptr) - ptr->AddRef(); return *this; } ePtr &operator=(ePtr &c) { + if (c.ptr) + c.ptr->AddRef(); if (ptr) ptr->Release(); ptr=c.ptr; - if (ptr) - ptr->AddRef(); return *this; } @@ -66,6 +66,8 @@ public: if (ptr) ptr->Release(); } + + T* grabRef() { if (!ptr) return 0; ptr->AddRef(); return ptr; } T* &ptrref() { assert(!ptr); return ptr; } ePtrHelper operator->() { assert(ptr); return ePtrHelper(ptr); }