저는 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
}
내가 TurboC++에서 사용하려는 내가, MS VC++ 2008 Express를 작성하고있어 DLL (볼랜드 : 아주 좋은 IDE/RAD).
나는 facotry 메서드를 통해 Derived1
을 내보내고 클라이언트 코드를 통해 Derived1
은 Derived2
의 인스턴스를 만듭니다. Derived1
과 Derived2
은 다른 dll에 포함 된 포인터 함수를 공유하므로이 포인터 함수를 Base 클래스에 넣습니다.
여기에 문제가 있습니다. 한 번 인스턴스 (공장을 통해) Derived1
의 인스턴스를 만들고 Derived2
의 여러 인스턴스를 만들 수 있습니다, Base
클래스 생성자는 더 많은 시간 (Derived1
에 1 및 Derived2
에 대해 여러 번) 호출됩니다.
어떻게 Base의 다중 강도를 방지 할 수 있습니까?
또 다른 질문 : 앞서 설명한 시나리오와
, Derived1
호출 여러 Derived2
의 intances 모두 Derived1
및 Derived2
고유 공통 기본 클래스를 확장합니다. 나는 묻는다. 그것은 나쁜 디자인인가? 내가 사용했던 것보다 더 우수한 클래스와 상속 계층 구조가 있습니까?
을 :: Base()는 Base의 인스턴스를 필요로하므로 실제로 Base가 필요하기 때문에 Base의 여러 인스턴스를 실제로 막을 수는 없습니다. Neil은 문제를 해결하기 위해 functionPtr을 정적으로 만드는 것에 대해 절대적으로 옳습니다. – AndreasT