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, если нет особых требований к выделению памяти.