2011-10-13 3 views
1

나는 래퍼 클래스를 설계하고 C에서 스택 할당 ++ 객체의 해제 (std::autoPtr에 약간 유사하지만 서로 다른 목적을 가지고) :WrapperPointer 클래스와

template <typename T> 
class ScalarPtr 
{ 
private: 
    T* m_data; 
    ... 
public: 
    ScalarPtr(T *data): m_data(data) 
    { ... } 
    T& operator*(); 
    T* operator ->(); 
    ~ScalarPtr() 
    { 
     if(m_data) 
     delete m_data; ... 
    } 
}; 

이제 문제는 때 I 이 같은 스택 할당 된 메모리의 개체에 대해이 클래스를 사용하려면 :

float temp=... 
ScalarPtr<float> fltPtr(&temp); 

순진 방법은 할당을 해제할지 여부를 지정 생성자에서 부울을 전달하는 것입니다 여부를하지만 더 좋은 방법이?

답변

2

부울 플래그 이외의 더 나은 방법이 있는지 확실하지 않습니다. 알고 계시므로 (따라서 Q에 문의하십시오) 최종 사용자가 인터페이스를 사용하지 않게됩니다.

래퍼/리소스 관리 클래스의 목적은 리소스 자체 (이 경우 동적 메모리)를 암시 적으로 해제하는 RAII를 구현하는 것입니다. 스택 변수가 범위를 넘어서 자 자동으로 파괴된다는 점을 감안할 때 스택 변수는 래퍼를 관리하는 리소스를 사용하는 것이 다소 이상한 것처럼 보입니다. 나는 그렇게하는 것을 선호하지 않을 것입니다.

그러나이 래퍼 클래스를 통해 클래스에 유니폼 액세스를 유지하려는 경우 가장 단순하지만 매우 우아하지 않은 방법이 부울 플래그로 간주됩니다.

+1

+1 : 부스트는 추가 매개 변수를 사용하여 사용자 정의 삭제자를 'shared_ptr'에 전달하므로 부울 플래그가 동일한 정맥에 도달한다고 생각할 수 있습니다. –

+0

@ Björn : 부스트의 주요 동기는 다른 기능으로 출시해야하는 리소스라고 생각합니다. – visitor