РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
648 of 815 menu

Функция make_shared

Функция make_shared создает и возвращает умный указатель shared_ptr на объект типа T. В первый параметр (шаблонный) мы передаем тип создаваемого объекта, а в круглые скобки - аргументы, которые будут переданы в конструктор этого объекта. Главное преимущество make_shared перед ручным созданием через new заключается в том, что память для управляющего блока и самого объекта выделяется одним непрерывным блоком, что повышает производительность и улучшает локальность кэша.

Синтаксис

std::make_shared<T>(args...)

Пример

Давайте создадим умный указатель на целое число со значением 42 и выведем его на экран:

#include <iostream> #include <memory> using namespace std; int main() { shared_ptr<int> ptr = make_shared<int>(42); cout << *ptr << endl; return 0; }

Результат выполнения кода:

42

Пример

Давайте создадим shared_ptr на строку "abcde" и проверим количество владельцев:

#include <iostream> #include <memory> #include <string> using namespace std; int main() { shared_ptr<string> ptr = make_shared<string>("abcde"); cout << *ptr << endl; cout << ptr.use_count() << endl; return 0; }

Результат выполнения кода:

"abcde" 1

Пример

Давайте создадим shared_ptr на вектор из чисел 1, 2, 3, 4, 5:

#include <iostream> #include <memory> #include <vector> using namespace std; int main() { shared_ptr<vector<int>> ptr = make_shared<vector<int>>(initializer_list<int>{1, 2, 3, 4, 5}); for (int val : *ptr) { cout << val << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 2 3 4 5

Смотрите также

  • класс shared_ptr,
    который представляет умный указатель с общим владением
  • метод get,
    который возвращает сырой указатель на объект
  • метод reset,
    который сбрасывает владение объектом
  • метод use_count,
    который возвращает количество владельцев объекта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить