Size: a a a

2020 May 10

I

Ivan in pro.cxx
Pavel Kazakov
пример последствий?
Невызов деструктора вашего класса.
источник

PK

Pavel Kazakov in pro.cxx
каким образом это случится?
источник

PK

Pavel Kazakov in pro.cxx
у кого-то будет, допустим,
std::vector*
?
источник

I

Ivan in pro.cxx
Pavel Kazakov
у кого-то будет, допустим,
std::vector*
?
Почему нет?
источник

PK

Pavel Kazakov in pro.cxx
за такой код надо в голову дать на ревью))
источник

IZ

Ilia Zviagin in pro.cxx
Denis Chernikov
Согласен, но форсить запрет такой возможности... Странно как-то
Понимаешь, возможность наследования предполагает работу кода в открытой среде, в такой, в которой изначально этот код никогда не работал, но это одновременно повышает ответственность пользователя кода, обязывает его не делать ошибки, нарушающие основные концепции базового класса.

Одни люди считают, что все ПО должно быть лишено даже минимальных возможностей сделать ошибку, возможно, потому что они создают ПО с большой долей ответственности, скажем, управление медтехникой или особо опасными техническими объектами. Другие люди наоборот полагают, что лучше дать конечному пользователю возможность более гибко использовать их библиотеки классов, а уж что они там в результате наследования получать, это коде из за ответственности. Оба подхода, наверное, имеют право на существование, а задача языка - дать обеим категориям программистов инструменты для описания того, что они хотят сделать, средствами языка.
источник

I

Ivan in pro.cxx
Pavel Kazakov
за такой код надо в голову дать на ревью))
Смешно, но боюсь, ревью — не панацея в таких вопросах и всегда возможно, что такой код проникнет в продакшн.
Наследование должно быть с виртуальным дестуруктором, иначе вы хулиганите саму идею наследования в плюсах.
источник

I

Ivan in pro.cxx
К тому же, это может быть, скажем std::string
источник

IZ

Ilia Zviagin in pro.cxx
Ivan
Домыслы, что нет виртуальных деструкторов? Такое наследование чревато последствиями.
Домыслы что чревато.
источник

I

Ivan in pro.cxx
Ilia Zviagin
Домыслы что чревато.
Да можно и классу назначать данные через memset. What should go wrong?
источник

DC

Denis Chernikov in pro.cxx
Ilia Zviagin
Понимаешь, возможность наследования предполагает работу кода в открытой среде, в такой, в которой изначально этот код никогда не работал, но это одновременно повышает ответственность пользователя кода, обязывает его не делать ошибки, нарушающие основные концепции базового класса.

Одни люди считают, что все ПО должно быть лишено даже минимальных возможностей сделать ошибку, возможно, потому что они создают ПО с большой долей ответственности, скажем, управление медтехникой или особо опасными техническими объектами. Другие люди наоборот полагают, что лучше дать конечному пользователю возможность более гибко использовать их библиотеки классов, а уж что они там в результате наследования получать, это коде из за ответственности. Оба подхода, наверное, имеют право на существование, а задача языка - дать обеим категориям программистов инструменты для описания того, что они хотят сделать, средствами языка.
Полностью поддерживаю эту мысль! Спасибо 🙂
источник

PK

Pavel Kazakov in pro.cxx
это то же самое, как раньше, до 11-х плюсов, когда деструкторы были не noexcept по дефолту, потому что какие-то наркоманы все-таки швыряли из них эксепшны — ну мало ли кто-то же бросит эксепшн?
источник

PK

Pavel Kazakov in pro.cxx
это очень сильный code smell
источник

PK

Pavel Kazakov in pro.cxx
Ivan
Да можно и классу назначать данные через memset. What should go wrong?
мемсетом нельзя в плюсах пользоваться по большей части
источник

I

Ivan in pro.cxx
Pavel Kazakov
это то же самое, как раньше, до 11-х плюсов, когда деструкторы были не noexcept по дефолту, потому что какие-то наркоманы все-таки швыряли из них эксепшны — ну мало ли кто-то же бросит эксепшн?
Что не так с указателем на std::string?
источник

PK

Pavel Kazakov in pro.cxx
зачем он? еще один уровень индирекшна просто так?
источник

PK

Pavel Kazakov in pro.cxx
тогда можно и std::string** увидеть — "а чо такого?"
источник

IZ

Ilia Zviagin in pro.cxx
Ivan
Смешно, но боюсь, ревью — не панацея в таких вопросах и всегда возможно, что такой код проникнет в продакшн.
Наследование должно быть с виртуальным дестуруктором, иначе вы хулиганите саму идею наследования в плюсах.
Во во, вот Иван такой человек, что все хочет контролировать. Чтобы все было правильно.

Мой вот опыт говорит, что все контролировать невозможно, и не всегда нужно. И даже можно просто свихнуться , пытаясь это сделать.
источник

I

Ivan in pro.cxx
Pavel Kazakov
зачем он? еще один уровень индирекшна просто так?
🤦‍♂️ Вы понимаете, что если это не запрещено, то это разрешено. И дизайн вашего типа не должен полагаться на то, что он не будет использован через указатель, а только через значение.
источник

PK

Pavel Kazakov in pro.cxx
сейчас бы пойти перебрать всё, что не запрещено в плюсах, и в один список занести
источник