c++ - 如何在 C++ 中正确向下转换

标签 c++ inheritance memory casting private-constructor

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

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

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

编辑:

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

最佳答案

确保您的构造函数至少受到保护,以便子类可以使用它。

不确定您对内存溢出的恐惧是什么,但是:

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();
};

作品perfectly .

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

关于c++ - 如何在 C++ 中正确向下转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163057/

相关文章:

c++ - 从 'triangle-soup' 中查找唯一顶点

c# - 使用什么术语来表示继承层次结构中两种类型之间的距离?

c++ opengl将模型坐标转换为世界坐标以进行碰撞检测

c++ - 向上转换和流运算符重载

c++ - 如何用另一个矩阵的值替换 C++ 中矩阵的元素(使用 Rcpp)?

java - 如何在派生内部类中编写构造函数?

Scala - 将特征与其导入混合(继承导入)

python - 在 numpy.zeros 中第一次接触内存后如何处理?

python - 性能问题 : big numpy array and system call

python - 在Python中向后读取URL套接字