Sobes.tech
Junior — Middle

Pouvez-vous expliquer la fonction et le fonctionnement de make_shared en C++ et quels sont ses avantages par rapport à l'utilisation de new pour créer des pointeurs intelligents?

sobes.tech IA

Réponse de l'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.