Swig и refrence сосчитали классы C ++ - PullRequest
2 голосов
/ 12 марта 2009

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

1 Ответ

1 голос
/ 13 апреля 2009

Взгляните на документацию SWIG . По сути, если у вас есть класс Foo и вы хотите обернуть его умным указателем Bar, вы делаете это:

%ignore Foo;
class Foo {
    ...
};

class Bar {
public:
    Foo *operator->();
    ...
}

Теперь, когда вы попытаетесь получить доступ к членам экземпляра Bar, он будет внутренне использовать Foo, но это будет полностью прозрачно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...