Re: Using operator new as a factory?
Johann 'Myrkraverk' Oskarsson wrote:
Now I wanted to explore if I could do the same by overloading new,
however, it seems that isn't possible and/or feasible:
1: The new operator doesn't seem to have access to the constructor
arguments so checking to see if the object has been created already
can't be done at this point.
2: Does not allow me to have the constructors private, so static
allocation is possible; that means bypassing the factory.
Am I right about point 1, or is there some trick I'm not aware of?
Also, is there some trick to alleviate point 2?
operator new is just one part of basic two step process of the object
creation. It is the allocation function that the implementation calls
upon a request to construct an object. The second step is to call the
appropriate constructor. Moreover, you can supply an alternative
allocation function but not overload the actual "new" operator used in
the user code to construct objects.
The things with this allocation function that will prevent you from
achieiving what you want to achieve are:
1. That it has no idea about the type of the object for which the
allocation request has been made, not to say the constructor arguments
(which I don't know if would be meaningful anyway).
2. There is no way (other than throwing bad_alloc) to communicate
about the next step of the constructor call that can prevent you from
making the allocation and prevent you from calling the constructor.
Throwing bad_alloc would then have 2 different meanings and would be
operator new (the allocation function) has nothing to do with the
constructor being private or not. It is the location where the call
has been made to construct the object that is important as for
accessibility. Otherwise, how would you write singletons or any other
object factory for that matter?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]