2

私の 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に、既存のスマートポインタをこれらのオブジェクトに内部的に使用するように指示できるかどうか考えていましたが、それを行う方法がわかりません:(

4

1 に答える 1

1

SWIG のドキュメントを参照してください。基本的に、クラスがFooあり、それをスマート ポインターでラップしたい場合は、次のBarようにします。

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

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

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

于 2009-04-13T14:43:38.797 に答える