Я разрабатываю dll C++, который содержит три класса: скажем, базовый класс 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++ (Борланд: очень хороший язь/рад).
Я экспортирую Derived1
через фактографический метод и по коду клиента Derived1
делает экземпляры Derived2
. Оба Derived1
и Derived2
совместно используют функцию указателя, содержащуюся в другой DLL, поэтому я помещаю эту функцию указателя в класс Base.
В этом проблема. Однажды я создаю один экземпляр (по умолчанию) и он может создавать несколько экземпляров Derived2
, конструктор класса Base
называется еще раз (1 для Derived1
и несколько раз для Derived2
).
Как предотвратить множественные инстанции базы?
Еще один вопрос:
С сценарии я описал ранее, Derived1
вызов нескольких intances из Derived2
и как Derived1
и Derived2
расширяет уникальный общий базовый класс. Я спрашиваю: плохой дизайн? Есть ли другой дизайн классов и их иерархия наследования лучше, чем я использовал?
Поскольку каждый экземпляр Derived * является Базе :: Base() ctor - экземпляр Base, вы не можете действительно предотвратить несколько экземпляров Base, потому что они вам абсолютно нужны. Нейл абсолютно прав о том, чтобы сделать staticProt static, чтобы решить вашу проблему. – AndreasT