This story is unavailable.

Actually you can use 2. in C++ too; it’s impossible only when the factory method has to be called from the constructor (as C++ forbids calling virtual methods from constructors).