将shared_ptr分配给数组

时间:2017-09-27 17:09:41

标签: c++ arrays shared-ptr reference-counting

假设我有一个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...
}

基本上,我要做的是返回一个新的shared_ptr,它增加引用计数,但指向原始数组的偏移量;我想避免在调用者在某个偏移处使用数组时删除数组。如果我只是返回可能发生的sp.get() + offset,对吧?我认为初始化一个新的shared_ptr以包含sp.get() + offset也没有意义。

C ++新手,所以不确定我是否正确接近这个。

1 个答案:

答案 0 :(得分:17)

您应该可以使用http://localhost/linV/poas/poas_direcciones/monitoreo/59bc2b02cb7926fc310000b3/59b83702cb7926303400003b?periodo=1

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};
}