Создать шаблонный класс, реализующий массив переменной длины.
Шаблон должен параметризоваться типом элемента массива.
Класс должен мочь определить хранит он элементы по значению, или указатели
на объекты. В случае, если он хранит указатели, то при удалении элемента из
массива (или при очистке массива) он должен применять к этим указателям
операцию delete.
![]() | Внимание |
|---|---|
Вариант с определением частичной конкретизации всего массива для типов, являющихся указателями, приниматься не будет. Нужно более изящное (и сложное) решение. |
Для защиты лабораторной работы необходимо представить:
Разработанный класс VarArray должен допускать примерно такое использование:
/*...*/
typedef VarArray<int *> Array1;
typedef VarArray<int> Array2;
int main() {
Array1 a1;
Array2 a2;
int *ip = new int;
*ip = 3;
a1.add(ip);
a2.add(3);
for (int i = 0; i < a1.length(); i++) {
if (a1[i]) cout << i << ": " << *(a1[i]) << endl;
}
a1.clear(); // влечет за собой delete a1[0] где-то
// в недрах VarArray<>
a2.clear(); // а здесь никаких попыток вызвать delete не происходит
return 0;
}