2011-11-14 3 views
1

을 특정 유형 (즉, delete이 아님)에 대한 기본 삭제자를 제공 할 수 있습니까? 특정 유형에 대한 shared_ptr의 기본 삭제 자

현재 내가 가진 :

// .h 
typedef boost::shared_ptr<SomeType> SomeTypePtr; 
SomeTypePtr InitPtr(SomeType * p); 



// .cpp 
struct SomeTypeDeleter { ... }; 
SomeTypePtr InitPtr(SomeType * p) 
{ 
    return SomeTypePtr(p, SomeTypeDeleter()); 
} 

나는 다른 기본 Deleter가를 사용하고자하는, 그래서 InitPtr 방법을 생략하고 대신

SomeTypePtr(pSomeType);    // uses SomeTypeDeleter 
SomeTypePtr(pSomeType, NullDeleter); // uses specified deleter 

그렇게 할 수있는 가장 좋은 방법은 무엇입니까를 사용할 수 있습니까?

답변

1

가장 좋은 방법은 간단한 래퍼 것 :

struct some_type_deleter 
{ 
    // ... 
}; 

template<class T> 
class some_type_ptr 
    : public boost::shared_ptr<T> 
{ 
    typedef boost::shared_ptr<T> base_type; 

public: 
    template<class U> 
    some_type_ptr(U* p) 
    : base_type(p, some_type_deleter()) 
    { 
    } 

    template<class U, class D> 
    some_type_ptr(U* p, D d) 
    : base_type(p, d) 
    { 
    } 

    template<class U, class A, class D> 
    some_type_ptr(U* p, A a, D d) 
    : base_type(p, a, d) 
    { 
    } 
}; 

완벽하지,하지만 작업을 수행합니다.

1

당신은 그렇게 할 수 없습니다. 기본 Deleter는 사용자 정의 할 수있는 것이 아닙니다. 기본 삭제자를 사용하는 공유 포인터는 실제로 사용자 정의 삭제자를 가진 포인터보다 작습니다 (내부적으로). 하지만 InitPtr 함수가 기본값을 제공하도록 할 수 있습니다.

관련 문제