【发布时间】:2009-04-26 19:37:30
【问题描述】:
我正在开发一个包含三个类的 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
}
我正在使用 MS VC++ 2008 Express 创建的 dll,我想在 Turboc++ 下使用它(borland: 非常好的 ide/rad)。
我通过 facotry 方法导出 Derived1,并通过客户端代码,Derived1 生成 Derived2 的实例。 Derived1 和 Derived2 都共享一个包含在另一个 dll 中的指针函数,所以我将该指针函数放在 Base 类下。
这就是问题所在。一旦我创建了Derived1 的一个实例(通过工厂),它可以创建Derived2 的多个实例,Base 类构造函数被调用多次(1 次用于Derived1,多次用于Derived2)。
如何防止 Base 的多个实例?
另一个问题:
在我之前描述的场景中,Derived1 调用Derived2 的多个实例并且Derived1 和Derived2 都扩展了唯一的公共基类。我问:这是一个糟糕的设计?有没有比我使用的更好的类及其继承层次结构的另一种设计?
【问题讨论】: