是否可以为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)
  {
  }
};

并不完美,但是能胜任。

10-06 07:53
查看更多