Вариант 2. Шаблонный массив переменной длины

Стоимость

20 баллов

Описание

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