Самым большим недостатком статических "создателей", вероятно, является ограничение наследования. Если вы или пользователь вашей библиотеки выведет класс из вашего Foo
, то Foo::Create()
станет практически бесполезным. Всю логику, определенную в нем, придется переписывать заново в наследуемом Create()
.
Я бы предложил компромисс: определите конструктор с тривиальной логикой инициализации объекта, который никогда не выходит из строя, затем определите создателя (создателей) с кэшированием, альтернативным построением и т.д.. Это оставляет возможность производных, и вы выигрываете от наличия создателей для данного класса.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: