Sobes.tech
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.