|
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 61
|
||||||
Конструктор и оператор перемещения24.08.2022, 12:23. Показов 2344. Ответов 33
Метки нет (Все метки)
Здравствуйте! Изучил тему конструктор и оператор перемещения, и написал следующий код:
0
|
||||||
| 24.08.2022, 12:23 | |
|
Ответы с готовыми решениями:
33
Конструктор перемещения и оператор присвоения для двусвязного списка
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,316
|
|||
| 25.08.2022, 18:00 | |||
|
Но еще раз: я не знаю компиляторов, которые бы не умели делать RVO в этом коде. Удалось воспроизвести только в MSVC++ и только в отладочном коде.
0
|
|||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 25.08.2022, 18:03 | |
|
TheCalligrapher, думаю именно в ней и именно в отладке этот код ТС и запускал.
0
|
|
|
Комп_Оратор)
|
||
| 25.08.2022, 18:42 | ||
if(!obj.d) не хуже того, что будет проверять count. Однако, разыменование обоих (указателя on нуль массива и нуль-пойнтера) это UB. Но проверка указателя легче понимается потребителем библиотеки. Я бы отказался от конструктора по умолчанию, присваивающего nullptr. Только явный конструктор c передачей счетчика и исключением для передачи нуля/нулей (или хотя бы дефолт но создающий вменяемый массив из одного элемента).
0
|
||
| 25.08.2022, 19:45 | |
|
0
|
|
|
Комп_Оратор)
|
|||
| 25.08.2022, 20:45 | |||
|
0
|
|||
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 25.08.2022, 21:29 | |||
|
IGPIGP, я не понял, причем тут математика и массив(в значении тип). Мы говорим о "динамическом массиве". Если бы, например, std::vector в дефолтном конструкторе аллоцировал память, им бы никто(кроме студентов) не пользовался. Что касается
Добавлено через 5 минут
0
|
|||
|
Комп_Оратор)
|
||||
| 25.08.2022, 22:29 | ||||
|
Добавлено через 1 минуту
0
|
||||
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||
| 25.08.2022, 22:54 | ||||
|
0
|
||||
|
Комп_Оратор)
|
||||||||
| 26.08.2022, 07:35 | ||||||||
0
|
||||||||
|
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 61
|
|||||||||
| 26.08.2022, 10:33 [ТС] | |||||||||
Кстати что Вы понимаете под
0
|
|||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 26.08.2022, 14:54 | |||
|
И успешная компиляция не означает отстутвие ошибок в коде. По большому счету вы и ваше знание стандарта определяют будете ли вы собирать код с ошибками или нет. 1) То, что ваш код вызывает конструктор перемещения - это формально правильно. Это несколько странно в отношении современных компиляторов, но правильно. Иными словами так и должно быть. Вызов конструктора у вас осуществляется при возврате из функции GetD.2) Вызов оператора перемещения у вас осуществляется из функции main при присваивании t = GetD(100);.3) На других компиляторах, или других настройках вашего текущего компилятора, у вас не будет вызова конструктора, потому что он оптимизируется. Поведение программы с наличием этой оптимизации и с ее отсутствием предполагается одинаковое. Т.е. внешне ничего не изменится.
1
|
|||
|
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 61
|
|
| 30.08.2022, 19:17 [ТС] | |
|
Dr Offset, я правильно понял, что в VS19, на которой я работаю мой код и предложенный отработают одинаково, а другие компиляторы могут увидеть ошибку?
0
|
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,316
|
|||
| 30.08.2022, 19:31 | |||
|
В С++ выполнение "как-будто лишнего" копирования в ряде контекстов всегда разрешалась и до сих пор разрешается. (Правильнее даже говорить наоборот: это копирование там изначально есть, но его разрешается устранять.) Вы должны об этом помнить и реализовывать копирующие методы своего класса соответствующим образом, т.е. так, чтобы класс продолжал работать правильно даже если его где-то скопируют лишний раз. То есть в С++ считается, что копирование должно быть "чистой" операцией: оно должно сохранять эквивалентность данных и не иметь никаких критических побочных эффектов. Где вы в своем коде видите какие-то проблемы от этого лишнего копирования? Какая вам разница, скопируют ли ваш объект 10, 5 или 0 раз, если копия эквивалентна оригиналу? Почему "не годится"? То есть да, в зависимости от компилятора, в т.ч. от настроек этого компилятора.
0
|
|||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 30.08.2022, 19:33 | |||
|
Ваш код имел вполне определенные ошибки связанные с утечкой памяти, которые были исправлены в "предложенном" коде. Так что ни о какой одинаковой работе речи не идет. Что касается заглавия темы касательно:
0
|
|||
| 30.08.2022, 19:33 | |
|
Конструктор перемещения Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка 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 реально казались вершиной жары, когда можно было весь день пропадать на. . .
|