我的许多 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 只在内部使用我现有的智能指针来处理这些可能有效的对象,但是我也不知道该怎么做:(