|
0 / 0 / 4
Регистрация: 09.04.2016
Сообщений: 128
|
|||||||||||
Конструктор копирования в С++25.06.2018, 22:00. Показов 2729. Ответов 22
Метки нет (Все метки)
Такой вопрос, работает ли такой синтаксис, если я передаю указатель на объект, а не объект?
0
|
|||||||||||
| 25.06.2018, 22:00 | |
|
Ответы с готовыми решениями:
22
Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования Конструктор класса, конструктор копирования запускается не тот который нужен Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику |
|
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
|
|||
| 25.06.2018, 22:33 | |||
|
0
|
|||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|||
| 26.06.2018, 00:09 | |||
|
Добавлено через 36 секунд
0
|
|||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|
| 26.06.2018, 00:17 | |
|
0
|
|
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|
| 26.06.2018, 01:12 | |
|
0
|
|
|
Комп_Оратор)
|
||||||||
| 26.06.2018, 01:35 | ||||||||
передача/возврат, например.
0
|
||||||||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|
| 26.06.2018, 01:47 | |
|
IGPIGP, только вот в твоём коде
&ra!=nullptrА вот A& ref = *((A)nullptr); уже UB и сегфолт зачастую. А значит, в мало-мальско сносном коде ссылка точно никогда не будет указывать на nullptr, о чём писали выше.Добавлено через 3 минуты shmkv, твой код — UB, такого не должно быть. А вот то, что в указателе может быть nullptr, стандартом допускается.
0
|
|
|
|
|||||||
| 26.06.2018, 03:56 | |||||||
|
во второй строчке вообще два разных действия. Сначала происходит UB когда ломается с UB вычисление выражения в скобках, потом идёт собственно вызов, который не ответственнен за поломку. Не по теме: потом идёт - некорректно так говорить, но смысл ясен всё равно что обвинить автора функции foo в том, что не предусмотрел ошибку с отрицательным значением аргумента
0
|
|||||||
|
Комп_Оратор)
|
|||||||
| 26.06.2018, 09:39 | |||||||
nullptr переданный с указателем это меньшее из зол. Такой указатель нельзя разыменовывать, но можно проверить на равенство nullptr. А вот указатель инициализированный чем попало или содержащий невалидный адрес проверить, мягко говоря, также просто как и дохлую ссылку. Моя реплика была не о nullptr, а о том, что безопасность ссылки по сравнению с указателем несколько преувиличена. И главное, не имеет отношения к теме о конструкторах копирования.Кроме всего. Если вы так уж хотите буквальных и не требующих размышлений ответов то извольте:
nullptr. Но и указатель который содержит значение nullptr тоже неизвестно куда указывает. Главное, что адрес не валиден.
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 26.06.2018, 10:23 | |
|
функция, которая по смыслу должна принимать
только живой валидный объект не должна допускать даже намёка на то, что объект может быть не валиден. такая функция принимает по ссылке, закладываясь, что ссылка априори валидная. ситуация, когда функции, которая ожидает валидный обьект, а ей скормили инвалида - программная ошибка в логике. в этом случае нужно дебажить/править код, а не изобретать костыли аля проверки указателя на нуль. зы: ошибок с протухшими указателями больше, чем с протухшими ссылками
0
|
|
|
Комп_Оратор)
|
|||
| 26.06.2018, 12:09 | |||
|
0
|
|||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||||
| 26.06.2018, 12:18 | ||||
|
Добавлено через 2 минуты Добавлено через 3 минуты
1
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 26.06.2018, 12:18 | |
|
0
|
|
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 26.06.2018, 12:28 | |
|
Прелесть конструктора копирования в том, что он используется в стандартной библиотеке для работы с контейнерами. Также с ним работают некоторые оптимизации компилятора.
Определить конструктор для указателя можно, но возможно, стоит просто разыменовывать указатель перед передачей в конструктор.
0
|
|
|
Комп_Оратор)
|
|||||||
| 26.06.2018, 12:40 | |||||||
|
А вот у константной ссылки есть прелесть которая позволяет передавать объекты на которые нельзя взять адрес. В этом их преимущество и... ржавый и гнутый гвоздь:
0
|
|||||||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 26.06.2018, 12:49 | |
|
Хорошее замечание. Конструктор копирования может работать с временными объектами без черной магии, в отличи от конструктора с параметром-указателем.
1
|
|
|
Комп_Оратор)
|
||
| 26.06.2018, 13:21 | ||
|
1
|
||
|
Неэпический
|
|||||||||
| 26.06.2018, 14:20 | |||||||||
Сообщение было отмечено Kuzia domovenok как решение
Решение
Конструктор копирования - это конструктор у которого первый параметр lvalue-ссылка на объект этого же класса, а остальные параметры заданы по-умолчанию, либо отсутствуют. То есть для типа Some, конструктор копирования может выглядеть как-то так так:
2
|
|||||||||
|
0 / 0 / 4
Регистрация: 09.04.2016
Сообщений: 128
|
|||||||||||
| 26.06.2018, 15:42 [ТС] | |||||||||||
|
То-есть если у меня есть класс Class и конструктор
Class *class2; Я могу вызвать Class(class1); и Class(class2); и получу одно и тоже? Извиняюсь, уже понял, просто мой первый ооп язык - java, ещё не привык Там он скорее такой
0
|
|||||||||||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|||
| 26.06.2018, 15:53 | |||
|
Добавлено через 37 секунд
1
|
|||
| 26.06.2018, 15:53 | |
|
Помогаю со студенческими работами здесь
20
Конструктор инициализации, конструктор копирования, деструктор Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор Конструктор копирования Конструктор копирования Конструктор копирования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|