Junior — Middle
Pode explicar a finalidade e o funcionamento da função make_shared em C++ e quais são as suas vantagens em comparação com o uso de new para criar ponteiros inteligentes?
sobes.tech IA
Resposta da IA
Функция 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.