Функция 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,
который возвращает количество владельцев объекта