Наследование здесь может не подходить.
Вместо этого рассмотрим бесплатную функцию шаблона:
template <typename T>
T* createOne(int a, int b, int c) {
int x = complexCalculation(a,b,c);
return new T(x);
}
То есть, если аргумент (ы) для конструктора будет одинаковым независимо от типа A
или B
; из вашего желания избежать любого дублирования кода, похоже, что это уже полезно.
A* myA = createOne<A>(1,2,3);
B* myB = createOne<B>(1,2,3);
Рассмотрим shared_ptr<>
, а не эти необработанные указатели.