是否可以为某种类型(不是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
最好的方法是什么?
答案 0 :(得分: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 :(得分:1)
你做不到。默认删除器不是可自定义的。具有默认删除器的共享指针实际上小于(内部)具有自定义删除器的指针。但是,您可以使InitPtr
函数提供默认值。