是否可以为boost::shared_ptr
提供某种类型的默认删除器(不是delete
)?
目前我有:
// .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
最好的方法是什么?
最佳答案
最好的方法是一个简单的包装器:
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)
{
}
};
并不完美,但是能胜任。