私のC++オブジェクトの多くは、AddRefメソッドとFreeRefメソッドを使って数え上げるrerfrenceを実装しています。 FreeRefがrefrence countを0に減らすと、オブジェクトはそのオブジェクトを削除します。swigとrefrenceはC++クラスを数えます
refrence countedオブジェクトを返すすべてのメソッドは、refrenceをインクリメントしません。スマートポインタは、単純にポインタを受け取ったカウント値をインクリメントし、ポインタがそれ以上参照しなくなったときにカウントをデクリメントすることができるので、これは簡単です。例えば:私はちょうど仕事があり、これらのオブジェクトのために内部的に私の既存のスマートポインタを使用するようにSWIGを伝えることができれば
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;}
};
しかし私はどちらかそれを行う方法がわからないイムmayby考えていた:(