将 shared_ptr 分配给数组的偏移量
Assigning a shared_ptr to an offset of an array
假设我有一个 shared_ptr
数组:
std::shared_ptr<int> sp(new T[10], [](T *p) { delete[] p; });
还有一个方法:
shared_ptr<T> ptr_at_offset(int offset) {
// I want to return a shared_ptr to (sp.get() + offset) here
// in a way that the reference count to sp is incremented...
}
基本上,我想做的是 return 一个新的 shared_ptr
增加引用计数,但指向原始数组的偏移量;我想避免在调用者以某个偏移量使用数组时删除数组。如果我只是 return sp.get() + offset
那可能会发生吧?而且我认为初始化一个新的 shared_ptr
来包含 sp.get() + offset
也没有意义。
C++ 的新手,所以不确定我是否正确处理这个问题。
您应该可以使用 aliasing constructor:
template< class Y >
shared_ptr( const shared_ptr<Y>& r, element_type* ptr ) noexcept;
这与给定的 shared_ptr
共享所有权,但确保根据那个而不是您给它的指针进行清理。
shared_ptr<T> ptr_at_offset(int offset) {
return {sp, sp.get() + offset};
}
假设我有一个 shared_ptr
数组:
std::shared_ptr<int> sp(new T[10], [](T *p) { delete[] p; });
还有一个方法:
shared_ptr<T> ptr_at_offset(int offset) {
// I want to return a shared_ptr to (sp.get() + offset) here
// in a way that the reference count to sp is incremented...
}
基本上,我想做的是 return 一个新的 shared_ptr
增加引用计数,但指向原始数组的偏移量;我想避免在调用者以某个偏移量使用数组时删除数组。如果我只是 return sp.get() + offset
那可能会发生吧?而且我认为初始化一个新的 shared_ptr
来包含 sp.get() + offset
也没有意义。
C++ 的新手,所以不确定我是否正确处理这个问题。
您应该可以使用 aliasing constructor:
template< class Y >
shared_ptr( const shared_ptr<Y>& r, element_type* ptr ) noexcept;
这与给定的 shared_ptr
共享所有权,但确保根据那个而不是您给它的指针进行清理。
shared_ptr<T> ptr_at_offset(int offset) {
return {sp, sp.get() + offset};
}