Sobes.tech
Back to questions
Junior — Middle
86

Каковы преимущества и недостатки использования функции make_shared в C++?

Answer from AI

sobes.tech AI

Функция make_shared в C++ создаёт объект и соответствующий shared_ptr в одном выделении памяти, что имеет свои преимущества и недостатки.

Преимущества:

  • Эффективность по памяти и производительности: выделяется одна память под объект и управляющий блок, уменьшая количество аллокаций.
  • Безопасность: уменьшает риск утечек памяти при исключениях, так как объект и управляющий блок создаются атомарно.

Недостатки:

  • Гибкость: нельзя использовать make_shared с объектами, требующими нестандартного аллокатора или с нестандартным управлением памятью.
  • Память: управляющий блок и объект хранятся вместе, что может привести к удержанию памяти, если есть циклические ссылки.

Пример использования:

#include <memory>

struct MyStruct {
    int x;
    MyStruct(int val) : x(val) {}
};

int main() {
    auto ptr = std::make_shared<MyStruct>(10);
    // ptr управляет объектом MyStruct
}

Таким образом, make_shared рекомендуется использовать для удобного и эффективного создания shared_ptr, если нет особых требований к выделению памяти.