|
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
|
||||||
Передача объекта по ссылке26.07.2019, 09:12. Показов 5864. Ответов 45
Метки нет (Все метки)
В книге Шилдта есть задание:
Когда функция show() возвращает свое значение, копия удаляется и при этом вызывается деструктор копии. Это приводит к освобождению памяти, на которую указывает указатель р, но освобожденная память все еще необходима аргументам функции show(). Что означает, - освобожденная память все еще необходима... Разве у каждого объекта не свой указатель p. Объясните, пожалуйста, подробнее, что происходит на самом деле, почему в таком случае программа завершается критически?
0
|
||||||
| 26.07.2019, 09:12 | |
|
Ответы с готовыми решениями:
45
Передача объекта структуры по ссылке Передача объекта-наследника по r-value ссылке на родительский класс |
|
Комп_Оратор)
|
||||
| 27.07.2019, 14:48 | ||||
|
Для темы передача объекта по ссылке мы ведём странный диалог. Если вы помните, вы упоминали тему о том на какой стороне имеет смысл проверять аргументы функции. Посмотрите, что с ней стало.
Вот фраза: Вот ещё фраза: DrOffset, вы серьёзно полагаете, что я считаю правильным такое поведение компиляторов? Но они это компилируют и автор языка это объясняет требованием совместимости со старым С стилем и кодом. О чём спор? Добавлено через 3 минуты
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 27.07.2019, 15:33 | |||||
|
Нет спора, я просто даю справочную информацию.
0
|
|||||
|
"C with Classes"
|
|
| 27.07.2019, 15:34 | |
|
Валеронище, как то так работают умные указатели, туда копай
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 27.07.2019, 15:40 | ||
|
0
|
||
|
Комп_Оратор)
|
||||
| 27.07.2019, 16:43 | ||||
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 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
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||
| 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
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 28.07.2019, 01:46 | ||||
|
Текущие версии языка не описывают более исключений из правил для этого случая. Для всех типов неявное снятие константности теперь едино считается ошибкой. Разве это плохо? Это вы называете заклинаниями, попытку сделать непротиворечивую систему? Вы скажете: "компиляторы работают как прежде". Я отвечу, если завтра появится компилятор, который станет трактовать эту ситуацию без исторических исключений, вы что, поменяете свое мнение? Если да, то вопросов больше нет. Мне все понятно.
0
|
||||
|
Комп_Оратор)
|
||||
| 28.07.2019, 15:15 | ||||
|
Что касается перехода. Б.Страуструп утверждал и утверждает (менее настойчиво), что С++ - надмножество C. То есть, - буквально: всё (за малым исключением) можно писать как на С и в стиле С. В этом смысле, и дятлу ясно, что тут есть нечто большее, чем мульти-парадигменность. То есть, можно проверять аргументы и на вызывающей стороне. Но далеко не все достигают уровня этой птицы. И есть масса людей которые громогласно утверждают, что С++ и С это разные языки и бла-бла-бла. Наш разговор затрагивает и эту сторону жизни.
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 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
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 28.07.2019, 22:20 | ||
-pedantic-errors, но с указанием нового стандарта - это ошибка. С этим же ключом, но указанием старого стандарта - это НЕ ошибка. Именно об этом я и говорю\говорил. Компилятор следует правилам, которые предписывает стандарт. Да, сейчас в компиляторе нужно включать строгое соответствие, но это не меняет сути вопроса. Компилятор должен следовать правилам, они не являются выдуманными или "написанными на заборе". С чего бы вообще нужно было разработчикам компиляторов, пусть даже только при соблюдении условий строгого соответствия, переводить эту ситуацию в категорию ошибок? Уж не потому ли, что точка зрения языка на этот вопрос поменялась, как вы считаете?
0
|
||
| 28.07.2019, 22:20 | |
|
Передача по ссылке
Обращение к методам объекта по ссылке на объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|