Back to questions
Junior — Middle
91
Можно ли объяснить назначение и работу функции make_shared в C++ и в чем её преимущества по сравнению с использованием new для создания умных указателей?
Answer from AI
sobes.tech AI
Функция make_shared в C++ используется для создания объекта и умного указателя std::shared_ptr на этот объект одновременно. Она выделяет память один раз для объекта и для управляющего блока, что повышает эффективность.
Преимущества make_shared по сравнению с использованием new и конструктора shared_ptr напрямую:
- Оптимизация выделения памяти:
make_sharedвыделяет одну область памяти для объекта и управляющего блока, тогда как при использованииnewиshared_ptrвыделяется две области. - Безопасность:
make_sharedисключает возможность утечки памяти, если конструкторshared_ptrвыбрасывает исключение послеnew. - Удобство: Код становится короче и чище.
Пример:
#include <memory>
std::shared_ptr<int> p1 = std::make_shared<int>(42); // Создает объект int со значением 42
// Аналогично, но менее эффективно:
std::shared_ptr<int> p2(new int(42));
Рекомендуется использовать make_shared в большинстве случаев для создания shared_ptr.