出于任何原因,我有一个由调用私有构造函数的静态方法创建的对象。(这不是单例)
我想从第一个派生一个新对象,它有更多的成员和功能。
但这是有问题的,因为静态方法返回一个firstObject*
对象,因此向下转换的创建secondObject*
会导致内存溢出。
我应该怎么办?我可以访问第一个对象的代码,但不可能更改它的构造函数(如果我更改它,我将不得不更改一个巨大的书面代码)。
编辑:
感谢所有响应者。我可以更改要保护的构造函数。
出于任何原因,我有一个由调用私有构造函数的静态方法创建的对象。(这不是单例)
我想从第一个派生一个新对象,它有更多的成员和功能。
但这是有问题的,因为静态方法返回一个firstObject*
对象,因此向下转换的创建secondObject*
会导致内存溢出。
我应该怎么办?我可以访问第一个对象的代码,但不可能更改它的构造函数(如果我更改它,我将不得不更改一个巨大的书面代码)。
编辑:
感谢所有响应者。我可以更改要保护的构造函数。
确保您的构造函数至少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
会更好),但这可能是题外话。