2009-03-12 7 views
2

私の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考えていた:(

答えて

1

を見てみましょうthe SWIG documentationであなたがクラスFooを持っており、スマートポインタBarでそれをラップしたい場合は、基本的に、あなたがこれを行う:。

%ignore Foo; 
class Foo { 
    ... 
}; 

class Bar { 
public: 
    Foo *operator->(); 
    ... 
} 

あなたがBarのインスタンスのメンバーにアクセスしようとすると、内部的にFooを使用しますが、これは完全に透過的です。

関連する問題