2011-11-14 8 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()); 
} 

私は別のデフォルト削除手段を使用したいので、私は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はカスタマイズ可能なものではありません。デフォルトのDeleterを持つ共有ポインタは、実際にはカスタムのDeleterを持つものよりも(内部的に)小さいです。ただし、InitPtr関数でデフォルトを指定することもできます。

関連する問題