2009-03-12 4 views
2

많은 C++ 객체가 AddRef 및 FreeRef 메소드를 통해 계산되는 rerfrence를 구현합니다. FreeRef가 참조 횟수를 0으로 줄이면 개체가 자체를 삭제합니다.Swig and refrence counted C++ classes

refrence counted 개체를 반환하는 모든 메서드는 refrence를 증가시키지 않습니다. 이것은 스마트 포인터가 단순히 포인터를받는 카운트 값을 증가시키고 더 이상 포인터를 참조하지 않을 때 카운트 값을 감소시킬 수 있기 때문에 간단합니다. 예 :

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

난 그냥 그러나 작업 중 하나 :(

답변

1

이 봐 그렇게하는 방법을 잘 메신저에서 이들 개체에 대해 내부적으로 기존 스마트 포인터를 사용하는 SWIG를 말할 수 있다면 내가 mayby ​​생각 당신이 Bar의 인스턴스의 멤버에 액세스하려고 할 때 이제

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

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

:. 당신이 클래스 Foo이 있고 스마트 포인터 Bar으로 포장하려는 경우 the SWIG documentation에서 기본적으로,이 작업을 수행 내부적으로 Foo를 사용하지만 완전히 투명합니다.