Существует действительно, чертовски веская причина, почему shared_ptr не разрешает явное приведение к A * (есть лучшие способы сделать это, чем наследовать, что в любом случае было бы невозможно).Задача shared_ptr и других интеллектуальных указателей состоит в том, чтобы предоставить небольшой инкапсулированный объект, единственной целью которого является владение указателем и решение, когда и как его удалить.
Если этот объект позволял одному и тому же указателю просто-напросто обойти его, не задумываясь, тогда он просто не мог бы служить своей цели.Каждый раз, когда вы копаете умный указатель, чтобы получить необработанный указатель внутри, вы нарушаете его семантику владения и должны затем быть очень осторожными, чтобы не делать глупостей.Умные указатели заставляют вас думать об этом, заставляя вас делать вызов, чтобы получить указатель внутри, а не просто молча делать это всякий раз, когда вы случайно передаете его неправильному виду функции.Думайте об этом, как умный указатель, говорящий: «Эй, ты знаешь, что то, что ты делаешь, может быть опасно, верно? Хорошо, тогда иди».
ИМХО, вселенная была бы лучше, если бы ее делилиуказатели не разрешали доступ к своим указателям.К сожалению, это не эта вселенная и не может быть этой вселенной, потому что иногда вам все равно нужно передать эту вещь в функцию, которая не использует умные указатели.Итак, поскольку мы не живем в этой лучшей вселенной, НАШИ умные указатели разрешают доступ, они просто не шлюхи об этом.