Переписал вопрос полностью. Пожалуйста, прочитайте внимательно
Отдельное примечание, которое не должно вас смущать: Базовый конструктор ожидает указатель на массив констант. Он не хранит указатель сам, он хранит данные!
У меня есть следующий код:
class Base {
public:
Base(int*);
// added this to explain why I need inheritance
virtual void abstractMethod() = 0;
};
Base::Base(const int *array) {
// just for example
cout << array[0] << endl;
cout << array[1] << endl;
cout << array[2] << endl;
}
class Derived : private Base {
public:
Derived();
void abstractMethod();
};
// who will delete? how to initialize?
Derived::Derived(): Base(new int[3]) {
}
Я хочу скрыть конструктор Base (int *) от пользователя моего производного класса. Для этого мне нужно указать значения по умолчанию для этого массива.
Проблема в том, что когда я использую список инициализации, например так:
Derived::Derived(): Base(new int[3]) {
}
Массив не инициализирован, и конструктор Base выводит мусор.
Еще одна проблема с этим кодом: кто освободит этот новый массив?
Как инициализировать массив перед его передачей в базовый класс?
Возможно ли это вообще в C ++?