shared_ptr связывает поле объекта с тем же блоком управления, что и владелец целиком. Такой shared_ptr хранит адрес части структуры.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpUpAl 357 of 696 menu
◀ ▶

Разделение владения aliasing в C++

Конструктор aliasing у shared_ptr связывает поле объекта с тем же блоком управления, что и владелец целиком.

Такой shared_ptr хранит адрес части структуры, а не всего выделения. Он принимает существующий shared_ptr-владелец и адрес поля внутри него. Пока живет хотя бы одна такая копия, хранилище структуры не освобождается. Запишем коробку с полем и отдельный указатель на это поле:

#include <iostream> #include <memory> struct Crate { int label = 0; int weight = 0; }; int main() { std::shared_ptr<Crate> box = std::make_shared<Crate>(); box->label = 1; box->weight = 40; std::shared_ptr<int> mass(box, &box->weight); std::cout << *mass << "\n"; return 0; }

Объявите struct Pair с полями key и val. Держите Pair в shared_ptr, создайте shared_ptr<int> на val через aliasing и выведите значение через второй указатель.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить