6

引数を削除するファンクタを探しています:

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

stdtr1またはにこのようなものはありboostますか?

4

3 に答える 3

10

C++0x はstd::default_deleteをサポートするために標準ライブラリに追加されstd::unique_ptrます。

と実質的に同じ機能を備えていますが、配列型オブジェクトのdelete_functor呼び出しにも特化しています。delete[]

于 2010-04-27T19:34:44.013 に答える
2

Boost.Lambda にはdelete_ptr と delete_arrayがあります

于 2010-04-27T19:39:41.740 に答える
0

私の会社ではブーストを使用することは許可されておらず、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();」による dtor のみを呼び出します。これは、たとえば、メモリ マネージャーと新しい配置を使用した場合です。

于 2012-05-23T15:02:29.290 に答える