12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
|||||||||||
1 | |||||||||||
Указатели на объекты21.08.2012, 13:00. Показов 1499. Ответов 16
Метки нет (Все метки)
В книге Шилдта, есть фрагмент кода:
Почему выше приведённый код работает, а вот этот нет (как-будто бы почти тоже самое):
0
|
21.08.2012, 13:00 | |
Ответы с готовыми решениями:
16
Указатели на объекты Указатели на объекты Указатели на объекты класса Указатели на объекты в массиве |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
21.08.2012, 13:09 | 2 | |||||
bgm313, Это не тоже самое. А вы уверены что этот пример вообще работает? Нельзя взять адрес временного объекта.
0
|
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
21.08.2012, 13:10 | 3 |
ну вообще где еще могут хранится обьекты? - в памяти компьютера, в какой либо его ячейке.
ну, а не работает, потому что под 2 еще не резервировалась память, следовательно, указателю не на что ссылаться.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.08.2012, 13:21 | 4 |
5.3.1/3 драфт n3337
1
|
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
|
21.08.2012, 13:24 [ТС] | 5 |
[QUOTE=ForEveR;3377397]bgm313, Это не тоже самое. А вы уверены что этот пример вообще работает? Нельзя взять адрес временного объекта.
Да уверен, но неужели Шилдт мог допустить такую оплошность? Код взят из кнги C++ для начинающих в разделе наследование и виртуальные функции.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.08.2012, 13:26 | 6 |
bgm313, Название книги и желательно страницу.
0
|
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
|
21.08.2012, 13:39 [ТС] | 7 |
Г. Шилдт. C++. Руководство для начинающих. 2005 год. 669 стр. djvu. 18.1 Мб.
Страницы 509 - 513
0
|
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
||||||
21.08.2012, 13:39 | 8 | |||||
если я правильно понял, тут идет заполнение массива новыми обьектами класса
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.08.2012, 13:43 | 9 |
Aloir, Тут идет взятие адреса от временной переменной.
0
|
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
|
21.08.2012, 13:44 [ТС] | 10 |
Я не спорю, он работает. Но вопрос в том, где хранятся объекты, на которые ссылаются указатели из массива shapes. С моей точки зрения код не совсем корректен: создается временный объект и его адрес присваивается какому-то элементы массива shapes. Но далее это объект уничтожается или нет?
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
21.08.2012, 13:45 | 11 |
Потому что то, что справа от & — это временные объекты. Они не сохраняются в памяти после завершения вычисления выражения. Поэтому если их адрес ваш компилятор и позволяет взять (всё же они где-то хранятся на время вычислений), то не факт, что там будет лежать та переменная, что вам нужна. Временные объекты уничтожаются после завершения полного выражения, так что то, что по тому адресу лежит в памяти — это уже формально не ваш объект и вообще память вам не принадлежит.
1
|
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
|
21.08.2012, 13:46 [ТС] | 12 |
Объект уничтожается, я проверил.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.08.2012, 13:46 | 13 |
bgm313, Да, там именно так. Ну что ж. Просто знайте, что этот код некорректный, потому как взятие адреса от временной переменной ни к чему хорошему не приведет.
1
|
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
|
21.08.2012, 13:48 [ТС] | 14 |
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.08.2012, 13:49 | 15 |
bgm313, Ну потому что Шилдт все же пишет многое вразрез со стандартом. На уровне начинающих - на это внимание не заостряют.
0
|
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
|
||||||
21.08.2012, 14:07 [ТС] | 16 | |||||
А вот такой код является ли верным? Тут также, как и во всех предыдущих примерах создается временный объект или нет? Расскажите кто знает?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.08.2012, 14:08 | 17 |
bgm313, Является. Тут нету создания "временного" объекта. Объект создается не на стеке, а в динамической памяти, соответственно будет существовать, пока его не delete.
1
|
21.08.2012, 14:08 | |
21.08.2012, 14:08 | |
Помогаю со студенческими работами здесь
17
Указатели на константные объекты Создать указатели и ссылки на объекты в памяти Как в методах первого класса использовать указатели на объекты второго и наоборот? Контейнер <vector> содержащий указатели на объекты не выдает количество элементов методом size() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |