438 / 96 / 41
Регистрация: 04.10.2011
Сообщений: 345
|
|||||||||||
1 | |||||||||||
Инициализация укзателей в классе30.09.2012, 17:51. Показов 1153. Ответов 6
Метки нет (Все метки)
Всем привет читаю книгу Пабло Халперна "Стандарная библиотека С++ на примерах". Там, в качестве обучения читателю предлагается пройти процесс разработки и реализации некоего приложения - записной книжки с использованием STL. Вопрос касается инициализации указателей на массивы строк, и удаление их.
В общем, есть некий класс, автор его реализовал примерно так (это предварительная версия - дальше автор реализует этот класс с использованием типа std::string - кабы люди, не читавшие данной книги не подумали чего нехорошего про автора ):
0
|
30.09.2012, 17:51 | |
Ответы с готовыми решениями:
6
Инициализация массива в классе Инициализация char в классе Инициализация массива в классе Инициализация переменной в классе |
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|
30.09.2012, 18:13 | 2 |
А нет вообще то ошибки не будет все корректно
1
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
30.09.2012, 18:25 | 3 | |||||
не совсем так.
по стандарту, оператор delete ничего не делает с нулевыми указателями. поэтому, если указатель инициализировать нулем (а ТС это сделал), то все корректно отработает.
ну и еще если первый листинг из книжки - то сам автор демонстрирует написание кода, небезопасного с точки зрения исключений. в нем возможны утечки. в списке инициализации больше одного new для инициализации голых указателей писать не стоит.
1
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|
30.09.2012, 18:26 | 4 |
Если указатели обнулили то при вызове оператора delete
ошибки не будет
1
|
438 / 96 / 41
Регистрация: 04.10.2011
Сообщений: 345
|
|||||||||||
30.09.2012, 18:42 [ТС] | 5 | ||||||||||
А... как бы во время работы указатели конечно же будут указывать на какие то данные, приведу полный листинг класса (как у автора, у меня получилось всё тоже самое, но разница была в том, что показывают листинги в начале топика). Класс просто является контейнером, который имеет 4 текстовых поля и методы для установки и получения значений + перегруженные оператор и конструктор копирования, .
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
30.09.2012, 18:51 | 6 | |||||
ну разница есть.
всякие функции работы со строками обычно не ожидают что им нуль подсунут. у автора книги этого не случится. потому что всегда под строки выделяется массив и записывается нолик. тем самым строка есть, но она нулевой длинны. у вас же не так. если попробовать взять какую-то строку, которую неинициализировали, то функция вернет нулевой указатель. это может быть проблемой, а может и нет. но удобнее все-таки, когда гарантируется возврат ненулевого указателя. неплохо бы еще от копипаста избавится. в коде куча функций с одинаковым кодом:
0
|
438 / 96 / 41
Регистрация: 04.10.2011
Сообщений: 345
|
|
30.09.2012, 19:05 [ТС] | 7 |
0
|
30.09.2012, 19:05 | |
30.09.2012, 19:05 | |
Помогаю со студенческими работами здесь
7
Инициализация valarray в классе Инициализация массива в классе Инициализация указателя в классе Инициализация статической константы в классе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |