0

出于任何原因,我有一个由调用私有构造函数的静态方法创建的对象。(这不是单例)

我想从第一个派生一个新对象,它有更多的成员和功能。
但这是有问题的,因为静态方法返回一个firstObject*对象,因此向下转换的创建secondObject*会导致内存溢出。

我应该怎么办?我可以访问第一个对象的代码,但不可能更改它的构造函数(如果我更改它,我将不得不更改一个巨大的书面代码)。

编辑:

感谢所有响应者。我可以更改要保护的构造函数。

4

1 回答 1

5

确保您的构造函数至少protected可以让子类使用它。

不知道你担心内存溢出是什么,但是这个:

class Base {
public:
  static Base* getInstance();
  virtual ~Base() {};
protected:
  Base() {};
};

class Derived : public Base {};

// Implementation
Base* Base::getInstance() { return new Derived(); }

int main() {
Base::getInstance();
};

完美运行

现在我建议您不要在这种情况下返回原始指针(std::unique_ptr会更好),但这可能是题外话。

于 2013-06-18T07:39:18.850 回答