111 / 98 / 84
Регистрация: 18.12.2015
Сообщений: 567
|
||||||
1 | ||||||
Инициализация указателей в конструкторе21.04.2017, 12:38. Показов 6687. Ответов 21
Метки нет (Все метки)
Всем привет! Вот интересный вопрос.
Написано, что до вызова тела конструктора создаются поля класса. Для пользовательских типов - вызываются дефолтные конструкторы. В списке инициализации мы можем сами указывать значение. В теле конструктора, только изменять значения созданных обектов. В исключениях, написано надо явно в списке инициализации инициализировать ссылки и константные поля. Но ничего не сказано о поле типе указатель.
Ведь ссылки являются альтернативой указателям.
0
|
21.04.2017, 12:38 | |
Ответы с готовыми решениями:
21
Задание размера и инициализация массива указателей в конструкторе инициализация перменных в конструкторе Инициализация char в конструкторе Инициализация массива в конструкторе |
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
|
|
21.04.2017, 12:42 | 2 |
0
|
111 / 98 / 84
Регистрация: 18.12.2015
Сообщений: 567
|
||||||
21.04.2017, 12:45 [ТС] | 4 | |||||
Указатель указывает на объект созданный дефолтным конструктором.
И на что указывает указатель на поле (например, int).
0
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
21.04.2017, 12:50 | 5 |
Указатель - это переменная в которой записан адрес какого-либо объекта. Если вы не инициализировали указатель адресом какого-либо объекта, то в указателе не будет какого-либо адреса чего-либо. Иначе говоря, он будет указывать в никуда.
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
21.04.2017, 12:51 | 6 |
Между ними есть важное различие: бывают пустые указатели, но не бывает пустых ссылок. Поэтому ссылку (а также константу) нужно инициализировать в момент создания. А указатель в этом смысле ничем не отличается от обычных переменных, его можно инициализировать когда нам будет удобно.
1
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
21.04.2017, 12:52 | 7 |
Kotik_leapold, если вы не проинициализируете явно указатель, он просто будет указывать на мусор. И это, кстати, приводит к трудноуловимым ошибкам. Хорошей практикой считается присваивание им хотя бы nullptr.
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
21.04.2017, 12:58 | 8 |
Немного уточню исходя из названия темы:
Хорошей практикой считается присваивание им nullptr в конструкторе.
0
|
111 / 98 / 84
Регистрация: 18.12.2015
Сообщений: 567
|
||||||
21.04.2017, 13:08 [ТС] | 9 | |||||
А что происходит если мы делаем вот так:
0
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
21.04.2017, 13:13 | 10 |
Ничего не произойдёт. Ваш код не скомпилируется.
Оператор new возвращает указатель. Вы не сможете присвоить указатель объекту.
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
21.04.2017, 13:56 | 11 |
нету пустых указателей - указатель объязательно "указывает" на что-то )
Добавлено через 1 минуту увы, но нет. Хорошей практикой считается присваивание им nullptr в списке инициализации конструктора или по новым фичам С++ сразу при объявлении как члена-класса
2
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
21.04.2017, 13:58 | 12 |
Возможно, я не совсем точно выразился. Под пустым указателем я имел в виду либо нулевой указатель, либо указатель, который "указывает" в воздух.
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
21.04.2017, 14:03 | 14 |
0
|
111 / 98 / 84
Регистрация: 18.12.2015
Сообщений: 567
|
||||||
21.04.2017, 15:08 [ТС] | 15 | |||||
Можно ли сделать вот так:
И как правильно инициализировать.
0
|
2270 / 1762 / 740
Регистрация: 27.07.2012
Сообщений: 5,237
|
||||||
21.04.2017, 15:30 | 16 | |||||
Нет. new возвращает указатель. Ссылка - не указатель, ей нельзя присвоить значение указателя. Это не скомпилируется.
Если под "правильно" понимать просто "чтобы скомпилилось", то так:
1
|
2270 / 1762 / 740
Регистрация: 27.07.2012
Сообщений: 5,237
|
|
21.04.2017, 16:23 | 18 |
1
|
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
|
|
21.04.2017, 16:29 | 19 |
Можете начинать подбирать подходящий smartpointer.
0
|
111 / 98 / 84
Регистрация: 18.12.2015
Сообщений: 567
|
|
23.04.2017, 21:50 [ТС] | 20 |
Я так понял динамически ссылке выделить память нельзя?
0
|
23.04.2017, 21:50 | |
23.04.2017, 21:50 | |
Помогаю со студенческими работами здесь
20
Инициализация массива в конструкторе Инициализация *char в конструкторе Инициализация строковых массивов в конструкторе Инициализация массива char в конструкторе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |