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 回答