Преимущества использования std::makeshared по сравнению с ручными конструкторами sharedptr:
Сокращённое количество отдельных выделений памяти. 12 При использовании makeshared блок счётчика ссылок и данные можно расположить в памяти последовательно, в одном выделенном блоке памяти. 2 Это достигается за счёт того, что создание объекта и выделение памяти под него изолируется от пользователя и происходит внутри функции makeshared. 2
Локализация кэша. 1 При использовании make_shared структура счётчика и объект расположены рядом друг с другом. 1 Действия, которые работают как со структурой счётчика, так и с самим объектом, будут иметь только половину количества пропусков кэша. 1
Безопасность исключений. 15 Использование make_shared означает, что не нужно иметь дело с new и необработанными указателями, что обеспечивает лучшую безопасность исключений — нет возможности выбросить исключение после выделения объекта, но до назначения его умному указателю. 5
Ответ сформирован YandexGPT на основе текстов выбранных сайтов. В нём могут быть неточности.
Примеры полезных ответов Нейро на вопросы из разных сфер. Вопросы сгенерированы нейросетью YandexGPT для актуальных тем, которые определяются на базе обобщённых запросов к Нейро.