Есть ли стандартный функтор удаления? - PullRequest
6 голосов
/ 27 апреля 2010

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

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

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

Ответы [ 3 ]

10 голосов
/ 27 апреля 2010

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

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

2 голосов
/ 27 апреля 2010

Boost.Lambda имеет delete_ptr и delete_array

0 голосов
/ 23 мая 2012

Нам не разрешено использовать 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;" от " _ptr-> ~ _Type ();" только позвонить дтору. Это может быть тот случай, когда вы использовали менеджер памяти и новое размещение, например.

...