Examples
Example: Using a factory function to insert a post-constructor call. Consider:class B { // hierarchy root
protected:
B() {/* ... */ }
virtual void PostInitialize() {/* ... */ } // called right after construction
public:
template<class T>
static shared_ptr<T> Create() { // interface for creating objects
shared_ptr<T> p( new T );
p->PostInitialize();
return p;
}
};
class D : public B {/* ... */ }; // some derived class
shared_ptr<D> p = D::Create<D>(); // creating a D object
This rather fragile design sports the following tradeoffs:Items 45 and 46).