私の C++ オブジェクトの多くは、AddRef メソッドと FreeRef メソッドを使用して、再帰カウントを実装しています。FreeRef が参照カウントを 0 に減らすと、オブジェクトは自身を削除します。
参照カウント オブジェクトを返すすべてのメソッドは、参照をインクリメントしません。スマート ポインターは、ポインターを受け取ると単純にカウントをインクリメントし、ポインターを参照しなくなったときにカウントをデクリメントできるため、これにより簡単になります。例えば:
template<class T> FlPtr
{
T *p;
public:
FlPtr(T *p=0):p(p){if(p)p->AddRef();}
~FlPtr(){if(p)p->FreeRef();}
FlPtr<T>& operator =(T *newP)
{
if(newP)newP->AddRef();
if(p)p->FreeRef();
p = newP;
return *this;
}
operator T*(){return p;}
};
SWIGに、既存のスマートポインタをこれらのオブジェクトに内部的に使用するように指示できるかどうか考えていましたが、それを行う方法がわかりません:(