Factory and placement new
Hi!
I'm planning something described below:
struct Base
{
Base(int i, int j) : i_(i), j_(j) {};
virtual ~Base() {};
int i_;
int j_;
};
struct Derived : public Base
{
Derived(int i, int j) : Base(i,j) {};
virtual ~Derived() {};
}
class Factory
{
public:
virtual Base* create(int arg1, int arg2)
{
if( !free_ )
return new Derived(arg1, arg2);
Base* ptr = ...; // extract from free list
ptr->~Base();
new (ptr) Derived(arg1, arg2);
return ptr;
};
virtual void release(Base* ptr)
{
// add ptr to free list
};
};
Does this work? I mean that does the Base-pointer point always to the
start of the allocated memory block so that the subsequent
Derived-objects created with the placement new shall fit to the space?
My own humble guess is that this works and is quite safe if you only
have a single factory object in use at a time (means that we only have
one Base-derived type in use) but things get dangerous if there is any
possibility that Base-derived objects get released to a factory that
didn't create them (because there is no guarantee that sizeof(Derived)
== sizeof(Derived2))?.
Do you find any other pitfalls or reasons why I shouldn't do this?
--
jpa
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]