Все типы в С++ делятся на POD-типы и nonPOD-типы. Для последних при создании динамических объектов сначала выделяется память, а потом вызываются конструкторы (без аргументов или инициализации), а при уничтожении — сначала вызывается деструктор, а потом возвращается память. При создании массива nonPOD-типа конструктор и деструктор вызываются для каждого элемента массива.
В стандарте определено несколько разных форм операций new и delete. Наиболее надежная форма операции new при отсутствии памяти генерирует исключение bad_alloc. Реализована и форма без генерации исключений, возвращающая при отсутствии памяти нулевой указатель.
Класс, запрашивающий для своих нужд динамическую память, обычно должен делать это в конструкторах. Тогда деструктор должен память возвращать. При реализации динамического класса практически обязательна реализадия конструктора копирования и операции присваивания, так как конструктор копирования и операция присваивания, генерируемые по умолчанию, осуществляют «поверхностное» копирование, что приводит к висячим и потерянным ссылкам.
При реализации динамического массива обязательна перегрузка операции индексирования, которая в этом случае может проверять значение задаваемого индекса. Вместо операции operator!] можно использовать операцию вызова функции operator (), которая прекрасно подходит для индексирования многомерного массива. Для динамических массивов можно реализовать набор полезных операций, спрятав циклы внутрь методов. Кроме того, такие массивы можно передавать в качестве параметров и возвращать как результат.
Опубликовал Kest
November 03 2013 16:36:40 ·
0 Комментариев ·
2523 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.