引数を削除するファンクタを探しています:
template<class T>
struct delete_functor
{
void operator()(T* p)
{
delete p;
}
};
std
、tr1
またはにこのようなものはありboost
ますか?
引数を削除するファンクタを探しています:
template<class T>
struct delete_functor
{
void operator()(T* p)
{
delete p;
}
};
std
、tr1
またはにこのようなものはありboost
ますか?
C++0x はstd::default_delete
をサポートするために標準ライブラリに追加されstd::unique_ptr
ます。
と実質的に同じ機能を備えていますが、配列型オブジェクトのdelete_functor
呼び出しにも特化しています。delete[]
Boost.Lambda にはdelete_ptr と delete_arrayがあります
私の会社ではブーストを使用することは許可されておらず、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 のみを呼び出します。これは、たとえば、メモリ マネージャーと新しい配置を使用した場合です。