Разделение владения 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 и выведите
значение через второй указатель.