出于任何原因,我有一个通过调用私有(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/