|
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
|
||||||
Передача объекта по ссылке26.07.2019, 09:12. Показов 5920. Ответов 45
Метки нет (Все метки)
В книге Шилдта есть задание:
Когда функция show() возвращает свое значение, копия удаляется и при этом вызывается деструктор копии. Это приводит к освобождению памяти, на которую указывает указатель р, но освобожденная память все еще необходима аргументам функции show(). Что означает, - освобожденная память все еще необходима... Разве у каждого объекта не свой указатель p. Объясните, пожалуйста, подробнее, что происходит на самом деле, почему в таком случае программа завершается критически?
0
|
||||||
| 26.07.2019, 09:12 | |
|
Ответы с готовыми решениями:
45
Передача объекта структуры по ссылке Передача объекта-наследника по r-value ссылке на родительский класс |
|
Комп_Оратор)
|
||||
| 27.07.2019, 14:48 | ||||
|
Для темы передача объекта по ссылке мы ведём странный диалог. Если вы помните, вы упоминали тему о том на какой стороне имеет смысл проверять аргументы функции. Посмотрите, что с ней стало.
Вот фраза: Вот ещё фраза: DrOffset, вы серьёзно полагаете, что я считаю правильным такое поведение компиляторов? Но они это компилируют и автор языка это объясняет требованием совместимости со старым С стилем и кодом. О чём спор? Добавлено через 3 минуты
0
|
||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||
| 27.07.2019, 15:33 | |||||
|
Нет спора, я просто даю справочную информацию.
0
|
|||||
|
"C with Classes"
|
|
| 27.07.2019, 15:34 | |
|
Валеронище, как то так работают умные указатели, туда копай
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 27.07.2019, 15:40 | ||
|
0
|
||
|
Комп_Оратор)
|
||||
| 27.07.2019, 16:43 | ||||
0
|
||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||
| 27.07.2019, 17:06 | ||||
|
Я что недостаточно привел фактов, зачем вы это все пишете? В С++03 это официально не считалось ошибкой. А теперь считается. Поведение компиляторов вообще тут не при чем. GCC разрешает массивы с неконстантной размерностью, хотя в стандартном С++ это является ошибкой, и что теперь, мы не должны говорить о том, что это будет ошибкой, если так написать? Тем более, что мы уточняем: "с точки зрения С++".
0
|
||||
|
Комп_Оратор)
|
|||
| 27.07.2019, 18:44 | |||
|
И я уже писал, что
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 27.07.2019, 19:14 | ||||
|
тогда это UB но вы почему-то выдаете это как за некий факт что все будет ОК то есть если нет явных гарантий со стороны компилятора, то "я думаю, что все адекваты .... что-то там" уже не работает Добавлено через 2 минуты но могут быть дополнительные гарантии со стороны разработчиков компилятора а это уже никак не связано с самим языком напрямую о стандарте которого и идет речь
0
|
||||
|
Комп_Оратор)
|
||
| 27.07.2019, 20:14 | ||
foo: невозможно преобразовать параметр 1 из бла-бла... К чему вот эти "адекваты"? А для char * - исключение. Оно само кастится и все довольны, что функция и не собирается ни чего писать. И опять 25. Я ни где не писал, что это хорошо. Но передать const char * в такую функцию не получается и всё. Что же его в массив переписывать и потом передавать? Вопрос даже не в том. Ни кто в здравом уме не работает с таким старым материалом. Но есть такой код из глубины времён. Undisputed, я утомился от этих "новичковских" тем. Один недавно с пеной у рта доказывал, что функция обязана всё на своей стороне проверить. А функция - матрёшка вложенная в другие и по хорошему она не знает что делается снаружи. Получила указатель и число - и может пробежать по диапазону. И негде ей узнать, правильно ей передали или будет бум. Ну да ладно. Эта тема о ссылках как аргументах. А мы где? Не хочется выбраться?
0
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||||||
| 27.07.2019, 20:23 | ||||||||
|
Это не было ошибкой ранее, т.к. стандарт оговаривал этот случай специально (я привел полную цитату). А вот теперь личное мнение
Лично вы не считаете, что это ошибка, потому, что компиляторы это позволяют для совместимости, вы думаете лично я как-то с этим не согласен? Да я сам бы этим пользовался, если бы пришлось. Я не согласен с тем, что вы выдаете личное мнение за аргумент и спорите с фактом. Вдвойне не понимаю, зачем на форуме новичков говорить про legacy и оправдывать какие-то там решения для совместимости, новички, может, вообще никогда с этим не столкнуться. Их надо отучивать всеми силами от этих legacy-костылей. А вы развели со мной полемику, и человеку непосвященному может показаться, будто бы тут действительно есть о чем поспорить, но это совсем не так! Тут не о чем спорить совершенно. Есть актуальная редакция стандарта, которая это запрещает, есть ворох компиляторов, которые, вопреки этому, это поддерживают. Ну это техническое решение, компромисс. Зачем это новичкам? Пусть они пишут свои новые проекты правильно, без оглядки на ошибки прошлого! Вы же понимаете, что современное поколение формирует свое понимание здесь, в интернете, а вы участвуете в этом непосредственно?
0
|
||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 27.07.2019, 20:23 | |
|
IGPIGP,
Я о том что если что-то явно запрещено или не указано среди правил языка, тогда это UB с точки зрения языка вот и все
0
|
|
|
Комп_Оратор)
|
||||
| 28.07.2019, 00:41 | ||||
|
В разделе физика, я всегда радовался вдумчивому собеседнику, даже когда он был не прав. Именно такой собеседник помогает показать материал и взгляды на него. То, что мы тут обсуждаем сейчас не критично и не концептуально. Не вижу что тут может навредить, особенно учитывая тот простой факт, новички и не поймут сути спора. Но я не собираюсь спорить даже с черновиком стандарта. Мне лишь не нравится тот набор заклинаний в страницу текста, где вместо определения объекта, излагается ощущения и впечатления о том, как эта штуковина, создаёт впечатления и ощущения. Теперь для аргументации нужно найти нужную цитату и дать ссылку или произнести. А я считаю, что старое определение не стоит забывать. Оно дано кратко и в предметных терминах. Это имеет свойства модели, то есть осмысленного знания. DrOffset, Undisputed, давайте я уже соглашусь со всем что вы говорите (хотя я и не спорил, то есть не стал бы спорить, если бы увидел насколько для вас это важно) и остановим это.
0
|
||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||
| 28.07.2019, 01:46 | ||||
|
Текущие версии языка не описывают более исключений из правил для этого случая. Для всех типов неявное снятие константности теперь едино считается ошибкой. Разве это плохо? Это вы называете заклинаниями, попытку сделать непротиворечивую систему? Вы скажете: "компиляторы работают как прежде". Я отвечу, если завтра появится компилятор, который станет трактовать эту ситуацию без исторических исключений, вы что, поменяете свое мнение? Если да, то вопросов больше нет. Мне все понятно.
0
|
||||
|
Комп_Оратор)
|
||||
| 28.07.2019, 15:15 | ||||
|
Что касается перехода. Б.Страуструп утверждал и утверждает (менее настойчиво), что С++ - надмножество C. То есть, - буквально: всё (за малым исключением) можно писать как на С и в стиле С. В этом смысле, и дятлу ясно, что тут есть нечто большее, чем мульти-парадигменность. То есть, можно проверять аргументы и на вызывающей стороне. Но далеко не все достигают уровня этой птицы. И есть масса людей которые громогласно утверждают, что С++ и С это разные языки и бла-бла-бла. Наш разговор затрагивает и эту сторону жизни.
0
|
||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||
| 28.07.2019, 20:08 | ||||
|
Скажем так, он утверждает несколько другое. Похожее, но другое. Кроме того, современные языки С и С++ по его мнению - это братья, а не родитель и ребенок. * Это компиляция в С++03, ошибки нет: https://wandbox.org/permlink/Khwut7Si1h8KShKG Есть предупреждение, что подобное преобразование не рекомендуется к использованию. * Это компиляция в С++11, ошибка есть: https://wandbox.org/permlink/cyHplEq7aWdHvuW8 Версия компилятора и ключи компиляции (кроме версии стандарта) одинаковые. В промышленной разработке ключ -pedantic используется не так уж и редко. У нас - используется.
0
|
||||
|
Комп_Оратор)
|
||||
| 28.07.2019, 20:34 | ||||
|
Но не суть. Половина компиляторов может поддерживать, половина нет и это значит, что у половины будет что-то не так.С чьей-то точки зрения. Всё едино, можно будет сказать, что для компилятора X это уже не пройдёт и включить ни как нельзя. С таким спорить не логично и я не собираюсь это делать.
0
|
||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 28.07.2019, 22:20 | ||
-pedantic-errors, но с указанием нового стандарта - это ошибка. С этим же ключом, но указанием старого стандарта - это НЕ ошибка. Именно об этом я и говорю\говорил. Компилятор следует правилам, которые предписывает стандарт. Да, сейчас в компиляторе нужно включать строгое соответствие, но это не меняет сути вопроса. Компилятор должен следовать правилам, они не являются выдуманными или "написанными на заборе". С чего бы вообще нужно было разработчикам компиляторов, пусть даже только при соблюдении условий строгого соответствия, переводить эту ситуацию в категорию ошибок? Уж не потому ли, что точка зрения языка на этот вопрос поменялась, как вы считаете?
0
|
||
| 28.07.2019, 22:20 | |
|
Передача по ссылке
Обращение к методам объекта по ссылке на объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|