Многие из моих объектов 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 просто использовать свой существующий интеллектуальный указатель для этих объектов, которые могут работать, но я не уверен, как это сделать: