唯一的基类实例

时间:2009-04-26 19:37:31

标签: database singleton base

我正在开发一个包含三个类的C ++ dll:比如基类BaseDerived1Derived2类。 场景:

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的实例。 Derived1Derived2共享一个包含在另一个dll中的指针函数,所以我将该指针函数放在Base类下。

这是问题所在。一旦我创建Derived1的一个实例(通过工厂)并且它可以创建Derived2的多个实例,Base类构造函数将被调用更多次(Derived1为1并且多次Derived2)。

如何防止Base的多个内容?

另一个问题:

根据前面描述的方案,Derived1调用Derived2的多个内容,Derived1Derived2都扩展了唯一的公共基类。我问:这是一个糟糕的设计?是否有另一种类的设计及其继承层次结构比我使用的更好?

1 个答案:

答案 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;