Создать шаблонный класс, реализующий массив переменной длины.
Шаблон должен параметризоваться типом элемента массива и
стратегией "владения". Под "владением" в этом контексте часто понимают
ответственность за освобождение памяти, занимаемой объектом. Так, если при
удалении объекта из коллекции она не должна заниматься освобождением памяти,
то говорят, что коллекция не "владеет" объектами. Если же при удалении
объекта из коллекции она производит освобождение памяти, то говорят, что
коллекция владеет объектами. В этом случае интерес представляет способ
освобождения памяти (вызов free()
, delete
или
delete[]
). Вам предлагается представить способ освобождения
памяти в виде стратегии, и параметризовать этой стратегией шаблонный класс.
Для защиты лабораторной работы необходимо представить:
Разработанный класс VarArray
должен допускать примерно такое использование:
/*...*/ typedef VarArray<SomeType *, DeleteStrategy> IntArray; int main() { IntArray a; a.add(new SomeType(8)); a.add(new SomeType(9)); for (int i = 0; i < a.length(); i++) { cout << a[i]->c_str() << endl; } a.clear(); // влечет за собой delete a[0]; delete a[1] где-то // в недрах VarArray<> из-за того, что VarArray был // параметризован соответствующей стратегией return 0; }