- 592 名前:デフォルトの名無しさん [2005/12/31(土) 18:29:36 ]
- 某より引用 左辺値を減らしてから代入する気が
tPtr->inc(); tPtr = ptr; tPtr->dec(); 次に示す簡単なサンプルは,スマートポインタークラスのテンプレート MemMgrと呼ばれるサポートクラスから作成されます。 SP クラスは,とても基本的で,-> や = といった演算子を唯一, オーバーライドしたものです。 SP メンバー関数は,カウントの使用方法を保つため, MemMgr inc()と dec()を呼び出します。 #include <iostream.h> //--------------- class SP template <class T> class SP { T* tPtr; public: SP(T* ptr) : tPtr(ptr) { tPtr->inc(); } ~SP() { tPtr->dec(); } T* operator->() { return tPtr; } SP& operator=(T* ptr) { tPtr->inc();tPtr = ptr;tPtr->dec(); return *this; } }; //----------- class MemMgr class MemMgr { int inUse; public: MemMgr(void) { inUse = 0; } void inc(void) {++inUse;} void dec(void) {if (--inUse == 0)elete this;} };
|

|