1

我正在开发一个包含三个类的 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)。

Derived1通过 facotry 方法导出,并通过客户端代码Derived1生成Derived2. 两者都Derived1共享Derived2一个包含在另一个 dll 中的指针函数,所以我将该指针函数放在基类下。

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

如何防止 Base 的多个实例?

另一个问题:

在我之前描述的场景中,Derived1调用 和 的多个实例并Derived2扩展唯一的公共基类。我问:这是一个糟糕的设计?有没有比我使用的更好的类及其继承层次结构的另一种设计?Derived1Derived2

4

1 回答 1

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;
于 2009-04-26T19:41:51.717 回答