指向属于另一个共享指针的内存段的共享指针
A shared pointer to a section of memory belonging to another shared pointer
我知道共享指针意味着共享相同的内存。但是,如果我的共享指针指向的元素不是另一个共享指针内存中的第一个元素,该怎么办?
考虑一个原始指针示例:
int* array = new int[10];
int* segment = &array[5];
我可以对共享指针array
和segment
做同样的事情吗?在这种情况下,他们会计算参考文献吗?
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
就保持有效,例如在典型的用例中,ptr
是r
管理的对象的成员,或者是r.get()
的别名(例如,向下转换)
例如:
auto array = std::make_shared<int[]>(10);
auto segment = std::shared_ptr<int>(array, &array[5]);
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- 共享 C++ 的数据成员指针
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 嵌套类、继承和C++中的共享指针
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 重载流<<运算符,用于指针/共享指针和其他类型的
- RAW指针共享_ptr
- 指针共享习语
- 将memmove函数与临时指针共享相同的地址