shared_ptr上的特定类型的默认删除器

时间:2011-11-14 14:51:22

标签: c++ shared-ptr

是否可以为某种类型(不是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

最好的方法是什么?

2 个答案:

答案 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函数提供默认值。