Size: a a a

2020 May 09

DC

Denis Chernikov in pro.cxx
Но мысль ясна — всё на основе принятых в проекте правил, всем спасибо 🙂
источник

АК

Александр Караев... in pro.cxx
Не все правила удается соблюдать. Просто мысль Константина, которую я процитировал, очень хорошо защищает от стрельбы в ногу
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Alexander N
Контейнеры stl не наследуются корректно
Что такое корректное наследование?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Александр Караев
Это ещё одно правило, о котором нужно помнить. Нет защиты от стрельбы в ногу, да и если не ошибаюсь, нарушает принцип подстановки Лисков
Не нарушает
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Denis Chernikov
Согласен
Но вот пишу я библиотеку... И не уверен, что захочу ставить final в ней где-либо
Не ставь, если не считаешь нужным
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Alexander N
Что имеется в виду под неполиморфным наследованием?
Как пример - иерархия тегов итераторов
источник

DC

Denis Chernikov in pro.cxx
Artöm Bakri Al-Sarmini
Не ставь, если не считаешь нужным
В том и дело, что никогда не нахожу нужды, если насильно не форсится проектом
источник

DC

Denis Chernikov in pro.cxx
Artöm Bakri Al-Sarmini
Как пример - иерархия тегов итераторов
Хммммм
источник

АК

Александр Караев... in pro.cxx
Artöm Bakri Al-Sarmini
Не нарушает
Ну как же - void f(base* p) { delete p; } имеет разное поведение для base и derived, если деструктор невиртуальный.
Но я могу ошибаться в теории, так что выслушаю исправления
источник

DC

Denis Chernikov in pro.cxx
Artöm Bakri Al-Sarmini
Как пример - иерархия тегов итераторов
Подождите... Они же наследуются 🙃
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Александр Караев
Ну как же - void f(base* p) { delete p; } имеет разное поведение для base и derived, если деструктор невиртуальный.
Но я могу ошибаться в теории, так что выслушаю исправления
Я реплаил реплай на сообщение, в котором явно говорится, что виртуального разрушения нет
источник

DC

Denis Chernikov in pro.cxx
И почему бы не разрешить наследование от крайних тэгов?..
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Denis Chernikov
Подождите... Они же наследуются 🙃
Это ответ на полиморфное использование
источник

АК

Александр Караев... in pro.cxx
@webreh а что если в твое правило добавить "или operator new() = delete;" ? :)
Хотя, это не спасёт от ручных выделений памяти и вызовов деструктора..
источник

DC

Denis Chernikov in pro.cxx
Artöm Bakri Al-Sarmini
Это ответ на полиморфное использование
А, окей 🙂
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Александр Караев
@webreh а что если в твое правило добавить "или operator new() = delete;" ? :)
Хотя, это не спасёт от ручных выделений памяти и вызовов деструктора..
malloc + placement new
источник

АК

Александр Караев... in pro.cxx
Хотя, кейс с наследованием категорий итераторов скорее всего покроется protected dtor, но я не уверен

UPDATE: не, чушь сказал.
источник

DF

Dollar Føølish in pro.cxx
А как протектед деструктор спасает?
источник

DF

Dollar Føølish in pro.cxx
При полиморфном использовании же все равно уб
источник

АК

Александр Караев... in pro.cxx
Dollar Føølish
При полиморфном использовании же все равно уб
По полиморфном использовании не получится удалить по указателю на базу
источник