|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
Вызов конструктора базового класса14.05.2019, 11:44. Показов 7974. Ответов 73
Метки нет (Все метки)
Приветствую всех. Создаю класс-наследник
std::string. У базового класса есть конструктор копии: std::string(const std::string& str). Правильно ли я создаю конструктор копии для своего класса?
std::string передаю объект типа IString.
0
|
||||||
| 14.05.2019, 11:44 | |
|
Ответы с готовыми решениями:
73
Вызов конструктора базового класса Вызов конструктора базового класса из порожденного Вызов конструктора базового класса из класса-наследника |
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 14.05.2019, 13:12 | |
|
2
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 14.05.2019, 13:15 | ||
|
Тут важно соблюдать правила, чтоб у тебя это закрепилось на уровне рефлексов.
1
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 14.05.2019, 13:21 [ТС] | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||
| 14.05.2019, 13:25 | |||||||||||||||||||
|
у которого отсутствует виртуальный деструктор, то поведение не определено. UB в действии: https://rextester.com/XMEVIJ77333
если у наследника нет своих собственных членов-данных. то есть, если sizeof(der) == sizeof(base),тогда проблем не будет. а если программист ничайно позабудет - ему компилятор напомнит.
3
|
|||||||||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 14.05.2019, 13:28 | |||||||
|
Вместо композиции можно использовать закрытое наследование, с выделением нужных функций из базового класса, например:
1
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 14.05.2019, 13:28 | ||
|
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 14.05.2019, 13:33 | ||
![]() В стандарте не вижу исключений, такого рода.
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||
| 14.05.2019, 13:39 [ТС] | ||||
int или char). Но ведь освобождение памяти, занятое ими, будет проходить без проблем?..![]()
0
|
||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 14.05.2019, 13:44 | |||
|
"Ты пишешь код и выражаешь мысль, современный код это и инструкции для процессора ( в конечном счете) и роман для другого программиста. Поэтому как роман составленный из шаблонов из методички будет смотреться "не очень", так и программа, наполненная бездумно вставленным кодом, обоснование которому "так принято", - тоже.". Не вижу что бы вы следовали особо каким-то принципам, например, SOLID?
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 14.05.2019, 13:53 | ||
|
Да и принципа такого нет. Есть общая рекомендация, которую выработали для общего случая. Однако в частном случае ее можно и не применять - если это обосновано.
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||
| 14.05.2019, 13:57 | |||||||||
|
если нет виртуального деструктора, то случится две вещи: 1. деструктор наследника не будет запущен. 2. за размер куска памяти, который нужно освободить, будет принят sizeof(object) удаляемого объекта.выше я привел пример, где случился краш. почему случился краш? причина - множественное наследование. получилось так, что delete попыталась освободить только часть памяти,(удалить один из подобъектов) вместо того, что бы освободить всю память, которая была захвачена у системы посредством new.так делать нельзя. нельзя запросить целое, а вернуть только половину. если у класса нет собственных членов-данных, стало быть размер наследника совпадает с размером базового класса, следовательно new/delete априори будет аллоцировать/освобождать тот же самый кусок памяти, даже с учетом множественного наследования. убираем данные-члены из классов, и вуаля! проблем никаких.
у конкретного наследника ещё ничего не гарантирует. важно, что бы либо не было множественного наследования, либо классы-участники в множественном наследовании так же не имели данных-членов. короче, смысл простой: нужно гарантировать что удаляется тот же самый кусок памяти, что был захвачен при помощи new Добавлено через 1 минуту или ты сейчас сможешь ответить на вопрос: "почему не есть хорошо?"
4
|
|||||||||
|
Неэпический
|
||
| 14.05.2019, 14:08 | ||
|
Речь-то о том, что подобный код приводит к неопределенному поведению. Код с UB может вполне нормально работать, однако UB как было, так и остается.
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 14.05.2019, 14:09 | |||
|
Остальное на свой риск, как всегда?)
0
|
|||
|
Неэпический
|
||
| 14.05.2019, 14:11 | ||
|
UB на то и UB, что никаких гарантий со стороны стандарта нет. Всё что без гарантий - всегда на свой страх, риск, опыт, знание реализации.
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
| 14.05.2019, 15:14 [ТС] | ||||||
|
Уфф! Здорово! Спасибо за информацию всем!
Мне непонятен следующий момент. Есть базовый класс без виртуального деструктора, а так же есть наследник этого класса с полем простого типа. Произойдет ли корректное освобождение памяти, занятой этим полем, в следующем коде:
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 14.05.2019, 15:36 | |||||||
0
|
|||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 14.05.2019, 15:56 | |
|
0
|
|
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 14.05.2019, 16:11 [ТС] | |
|
То есть, мои слова о том, что в созданном по умолчанию деструкторе нет кода, неверны. Там есть код освобождения памяти, которую занимали поля класса. Я все правильно понимаю?
0
|
|
|
Вездепух
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
|
|||||||||||||
| 14.05.2019, 17:19 | |||||||||||||
Сообщение было отмечено d7d1cd как решение
Решение
sizeof(A) == sizeof(B). Однако хрясь
A и - о чудо - вдруг все заработало!Добавлено через 4 минуты
1
|
|||||||||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 14.05.2019, 17:25 | |||
B::operator delete не будет вызван?
0
|
|||
| 14.05.2019, 17:25 | |
|
Помогаю со студенческими работами здесь
40
Знакомство с наследованием. Вызов конструктора базового класса Вызов базового конструктора Вызвать конструктор производного класса без конструктора базового класса Наследование конструктора из базового класса Инициализация конструктора базового класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|