Шрифт:
Обе проблемы встречаются в реальных программах; так что это не просто теоретические возможности.
Удаление нулевого указателя не приводит ни к каким последствиям (так как нулевой указатель не ссылается ни на один объект), поэтому эта операция безвредна. Рассмотрим пример.
Зачем возиться с освобождением памяти? Разве компилятор сам не может понять, когда память нам больше не нужна, и освободить ее без вмешательства человека? Может. Такой механизм называется автоматической сборкой мусора (automatic garbage collection) или просто сборкой мусора (garbage collection). К сожалению, автоматическая сборка мусора недешевое удовольствие и не идеально подходит ко всем приложениям. Если вам действительно нужна автоматическая сборка мусора, можете встроить этот механизм в свою программу. Хорошие сборщики мусора доступны по адресу www.research.att.com/~bs/C++.html. Однако в этой книге мы предполагаем, что читатели сами разберутся со своим “мусором”, а мы покажем, как это сделать удобно и эффективно.
17.5. Деструкторы
Теперь мы знаем, как хранить элементы в векторе. Мы просто выделим достаточное количество свободной памяти и будем обращаться к ней с помощью указателя.
Итак, член
Обратите внимание на то, что мы инициализируем элементы их значением по умолчанию (
К сожалению, наш примитивный класс
После выхода из функции