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