私は3つのクラスを含む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)。
私は面取り法によりDerived1
をエクスポートし、クライアントコードDerived1
はDerived2
のインスタンスを作成します。 Derived1
とDerived2
は、別のdllに含まれるポインタ関数を共有しているので、そのポインタ関数をBaseクラスの下に置きます。
ここに問題があります。いったん私はDerived1
の1つのインスタンス(工場経由)を作成し、Derived2
の複数のインスタンスを作成することができるので、の場合は1、Derived2
の場合は1回多く、Base
クラスのコンストラクタが呼び出されます。
ベースの複数のインテンシティを防ぐにはどうすればよいですか?
さらに質問:私は先に説明したシナリオに
、Derived2
両方Derived1
とDerived2
のDerived1
呼び出し複数intancesは、固有の共通のベースクラスを拡張します。私は尋ねる:それは悪いデザインですか?私が使ったものよりも、クラスとその継承階層の別のデザインがありますか?
を:: Base()はBaseのインスタンスを扱うため、絶対に必要とするためBaseの複数インスタンスを実際には防ぐことはできません。 Neilはあなたの問題を解決するためにfunctionPtrを静的にすることについて絶対に正しいです。 – AndreasT