class Factory { public: virtual void* getInterface(int IID) { Channel* res = 0; if(IID == IIDChan) { res = new Channel(); } return res; } } // Code using the class: Channel* chan = factory.getInterface(IIDChan); // This crashes chan->someMethod(); // But this doesn't: Channel* chan = new Channel(); chan->someMethod();