Преимущества использования std::makeshared по сравнению с ручными конструкторами sharedptr:
Сокращённое количество отдельных выделений памяти. arne-mertz.de scrutator.me При использовании makeshared блок счётчика ссылок и данные можно расположить в памяти последовательно, в одном выделенном блоке памяти. scrutator.me Это достигается за счёт того, что создание объекта и выделение памяти под него изолируется от пользователя и происходит внутри функции makeshared. scrutator.me
Локализация кэша. arne-mertz.de При использовании make_shared структура счётчика и объект расположены рядом друг с другом. arne-mertz.de Действия, которые работают как со структурой счётчика, так и с самим объектом, будут иметь только половину количества пропусков кэша. arne-mertz.de
Безопасность исключений. arne-mertz.de stackoverflow.com Использование make_shared означает, что не нужно иметь дело с new и необработанными указателями, что обеспечивает лучшую безопасность исключений — нет возможности выбросить исключение после выделения объекта, но до назначения его умному указателю. stackoverflow.com
Примеры полезных ответов Поиска с Алисой на вопросы из разных сфер. Вопросы сгенерированы нейросетью YandexGPT для актуальных тем, которые определяются на базе обобщённых запросов к Поиску с Алисой.