2009-03-12 4 views
2

Plusieurs de mes objets C++ implémentent le comptage de la réfrérence via les méthodes AddRef et FreeRef. Si FreeRef réduit le nombre de réfrences à 0, l'objet se supprime.Classes C++ de swig et de réfrence

Toutes les méthodes qui retournent un objet compté par réfrence n'incrémentent pas la réfrence. Ceci le rend simple car un pointeur intelligent peut alors simplement incrémenter le compte apon recevant un pointeur et décrémenter le compte quand ils ne le réfrènent plus. par exemple:

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;} 
}; 

Je pensais mayby ​​si je pouvais dire SWIG juste utiliser mon pointeur intelligent existant en interne pour ces objets qui peuvent travailler mais je ne suis pas sûr de savoir comment faire que ce soit :(

Répondre

1

Jetez un oeil . à the SWIG documentation en gros, si vous avez une classe Foo et que vous voulez envelopper par un pointeur intelligent Bar, vous faites ceci:

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

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

maintenant, lorsque vous essayez d'accéder à des membres d'une instance de Bar , il utilisera en interne Foo, mais ce sera complètement transparent.

Questions connexes