Есть ли стандартный функтор удаления?

Я ищу функтор, который удаляет его аргумент:

template<class T>
struct delete_functor
{
    void operator()(T* p)
    {
        delete p;
    }
};

есть ли что-то подобное в std, tr1 или boost?

3 ответов


C++0x добавит std::default_delete в стандартную библиотеку для поддержки std::unique_ptr.

Он имеет ту же функциональность, что и ваш delete_functor, но также специализирован для вызова delete[] для массива объектов типа.


импульс.Лямбда имеет delete_ptr и delete_array


нам не разрешено использовать boost в моей компании, и мы также не используем C++11, поэтому я использую это:

namespace
{
  // - for use to deletion:
  // std::vector<int*> foobar;
  // std::for_each(foobar.begin(), fooabr.end(), del_fun<T>());
  template<class _Type>
  struct del_fun_t:
    public unary_function<_Type*, void>
  {
    void operator()(_Type* __ptr) {
      delete __ptr;
    }
  };

  template<class _Type>
  del_fun_t<_Type> del_fun()
  {
    return del_fun_t<_Type>();
  };
};

Я думаю, что это то, что вы ищете.

вы также можете воссоздать его как dtor_fun_t и заменить " delete _ptr; "by"_ptr - > ~_Type ();" для вызова только dtor. Это будет случай, когда вы использовали менеджер памяти и размещение нового, например.