Consider the following code:
class A
{
B* b; // an A object owns a B object
A() : b(NULL) { } // we don\'t know what b will be when constructing A
How about allocating the memory for B once (or for it's biggest possible variant) and using placement new?
A would store char memB[sizeof(BiggestB)];
and a B*
. Sure, you'd need to manually call the destructors, but no memory would be allocated/deallocated.
void* p = memB;
B* b = new(p) SomeB();
...
b->~B(); // explicit destructor call when needed.