我正在开发一个包含三个类的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
类构造函数将被调用更多次(Derived1
为1并且多次Derived2
)。
如何防止Base的多个内容?
另一个问题:
根据前面描述的方案,Derived1
调用Derived2
的多个内容,Derived1
和Derived2
都扩展了唯一的公共基类。我问:这是一个糟糕的设计?是否有另一种类的设计及其继承层次结构比我使用的更好?
答案 0 :(得分:1)
您无法阻止Base的多个实例。您可以阻止指针的多个实例 - 将其设为静态:
class Base {
public:
// save first pointer I get passed
Base( sometype * p ) {
if ( myptr == 0 ) {
myptr = p;
}
}
private:
static sometype * myptr;
};
在C ++源文件中,您需要定义myptr:
sometype * Base::myptr = 0;