Я разрабатываю C ++ dll, который содержит три класса: скажем, базовый класс Base
, Derived1
и Derived2
класс.
Сценарий:
class Base
{
//ctor, dtor, members and methods here
}
class Derived1 : public Base
{
//ctor, dtor, members and methods here
}
class Derived2 : public Base
{
//ctor, dtor, members and methods here
}
DLL, которую я создаю с MS VC ++ 2008 Express, которую я хочу использовать под Turboc ++ (borland:
очень хорошая идея / рад).
Я экспортирую Derived1
с помощью метода facotry, а с помощью клиентского кода Derived1
создает экземпляры Derived2
. И Derived1
, и Derived2
совместно используют функцию указателя, содержащуюся в другой dll, поэтому я поместил эту функцию указателя в Базовый класс.
Вот проблема. Когда я создаю один экземпляр (через фабрику) Derived1
и он может создавать несколько экземпляров Derived2
, конструктор класса Base
вызывается несколько раз (1 для Derived1
и несколько раз для Derived2
).
Как я могу предотвратить множественные экземпляры Base?
Еще один вопрос:
В сценарии, который я описал ранее, Derived1
вызывает несколько экземпляров Derived2
, и оба Derived1
и Derived2
расширяют уникальный общий базовый класс. Я спрашиваю: это плохой дизайн? Есть ли другой дизайн классов и их иерархия наследования лучше, чем я использовал?