指向属于另一个共享指针的内存段的共享指针

A shared pointer to a section of memory belonging to another shared pointer

本文关键字:指针 共享 内存 属于 另一个      更新时间:2024-09-28

我知道共享指针意味着共享相同的内存。但是,如果我的共享指针指向的元素不是另一个共享指针内存中的第一个元素,该怎么办?

考虑一个原始指针示例:

int* array = new int[10];
int* segment = &array[5];

我可以对共享指针arraysegment做同样的事情吗?在这种情况下,他们会计算参考文献吗?

std::shared_ptr有一个别名构造函数,正是针对这种情况:

template< class Y >
shared_ptr( const shared_ptr<Y>& r, element_type* ptr ) noexcept;

别名构造函数:构造一个shared_ptr,该与初始值r共享所有权信息,但持有不相关且不受管理的指针ptr。如果此shared_ptr是组中最后一个超出范围的,它将为最初由r管理的对象调用存储的deleter。但是,在此shared_ptr上调用get()将始终返回ptr的副本。程序员有责任确保只要此shared_ptr存在,此ptr就保持有效,例如在典型的用例中,ptrr管理的对象的成员,或者是r.get()的别名(例如,向下转换)

例如:

auto array = std::make_shared<int[]>(10);
auto segment = std::shared_ptr<int>(array, &array[5]);