Создать шаблонный класс, реализующий массив переменной длины.
Шаблон должен параметризоваться типом элемента массива.
Класс должен мочь определить хранит он элементы по значению, или указатели
на объекты. В случае, если он хранит указатели, то при удалении элемента из
массива (или при очистке массива) он должен применять к этим указателям
операцию 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; }