Swig和引用统计了c ++类

时间:2009-03-12 20:12:09

标签: c++ swig reference-counting

我的许多c ++对象通过AddRef和FreeRef方法实现rerfrence计数。如果FreeRef将引用计数减少为0,则对象将删除其自身。

返回refrence计数对象的所有方法都不会增加引用。这使得它很简单,因为智能指针可以简单地递增计数apon接收指针并在它们不再引用它时递减计数。例如:

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只是在内部使用我现有的智能指针来处理这些可能有效的对象,但我不知道如何做到这一点:(

1 个答案:

答案 0 :(得分:1)

看看the SWIG documentation。基本上,如果你有一个类Foo并希望用智能指针Bar包装它,你可以这样做:

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

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

现在,当您尝试访问Bar实例的成员时,它将在内部使用Foo,但这将是完全透明的。