|
Boost : |
From: Corrado Zoccolo (czoccolo_at_[hidden])
Date: 2007-11-18 04:57:15
Hi Fernando,
> It clearly could, though it worries me than in that case it wouldn't be an
> "in-place" factory but just a ordinary factory.
> While I can understand your need from your side, specially assuming that
> the
> pointer is an implementation detail, it feels a bit of a hack from the
> in-place factory POV.
>
Ok, but I think having it could improve in_place factory usability in
several places. I'm not the only one working on a library proposal with
small object optimization currently. Maybe also Steven's TypeErasure library
could benefit from this.
> <snip>
> IIRC
> typical implementations of new call malloc() then in place new, so,
> couldn't
> you do the same?
>
I can call either malloc or global new (both will give correctly aligned
memory), but this will defeat class specific memory management.
If operator new and delete are redefined for a given class, I'd like to (and
the library user also would me to) use the redefined one.
Moreover, if new/delete are redefined, the memory allocated by:
void *b=::operator new (sizeof T); // memory allocated through global
operator new
p= new (b) T(args); // this is what in_place does
cannot be deallocated by
delete p;
I think something like the following should work, but it seems clumsy and I
still have to check:
template<typename T>
struct new_invoker : T {
static void * alloc() { return operator new(sizeof T); } // should look up
operator new in T scope before global scope
static void dealloc(void *p) { return operator delete(p); } // should look
up operator delete in T scope before global scope
private:
new_invoker();
new_invoker(new_invoker const &);
void ~new_invoker();
};
// specializations for non-class types omitted
Corrado
-- __________________________________________________________________________ dott. Corrado Zoccolo mailto:zoccolo_at_[hidden] PhD - Department of Computer Science - University of Pisa, Italy -------------------------------------------------------------------------- The self-confidence of a warrior is not the self-confidence of the average man. The average man seeks certainty in the eyes of the onlooker and calls that self-confidence. The warrior seeks impeccability in his own eyes and calls that humbleness. Tales of Power - C. Castaneda
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk