По любой причине у меня есть объект, созданный статическим методом, который вызывает приватный конструктор. (Это не синглтон)
Я хочу сделать новый объект производным от первого, который имеет больше членов и функций.
Но это проблематично, потому что статический метод возвращает 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
было бы намного лучше) но это, вероятно, не по теме.
Других решений пока нет …