наследование — Как правильно уменьшить в Stack Overflow

По любой причине у меня есть объект, созданный статическим методом, который вызывает приватный конструктор. (Это не синглтон)

Я хочу сделать новый объект производным от первого, который имеет больше членов и функций.
Но это проблематично, потому что статический метод возвращает firstObject* объект, поэтому создание с понижением secondObject* сделает переполнение памяти.

Что я должен делать? У меня есть доступ к коду первого объекта, но невозможно изменить его конструктор (если я изменю его, мне придется изменить огромный написанный код).

РЕДАКТИРОВАТЬ:

Спасибо всем респондентам. Я могу изменить конструктор, который будет защищен.

0

Решение

Убедитесь, что ваш конструктор хотя бы 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 было бы намного лучше) но это, вероятно, не по теме.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]