我的许多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只是在内部使用我现有的智能指针来处理这些可能有效的对象,但我不知道如何做到这一点:(
答案 0 :(得分:1)
看看the SWIG documentation。基本上,如果你有一个类Foo
并希望用智能指针Bar
包装它,你可以这样做:
%ignore Foo;
class Foo {
...
};
class Bar {
public:
Foo *operator->();
...
}
现在,当您尝试访问Bar
实例的成员时,它将在内部使用Foo,但这将是完全透明的。