从数组

时间:2016-10-02 18:40:39

标签: c++ c++14 shared-ptr shared-memory unique-ptr

我的功能是将一些值复制到我将要通过的对象。

所以,像这样的东西

void functionReturnObjects(int* ptr);

我会像上面这样调用上面的函数

std::shared_ptr<int> sp( new int[10], std::default_delete<int[]>() );
functionReturnObjects(sp.get());  => so this will copy int objects to sp.

现在,我想从上面的10中获取单独的共享ptr,并希望单独复制或希望与其他共享ptr共享它。

类似

std::shared_ptr<int> newCopy = sp[1] ==> This is not working I am just showing what I want.

基本上我想将所有权从10个共享指针转移到新的个人共享ptr而不分配新内存。

如果问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:3)

使用std::shared_ptr's aliasing constructor(重载#8):

template< class Y > 
shared_ptr( const shared_ptr<Y>& r, element_type *ptr );
std::shared_ptr<int> newCopy(sp, sp.get() + 1);

这将使newCopysp共享使用new int[10]创建的整个数组的所有权,但newCopy.get()将指向所述数组的第二个元素。

在C ++ 17中,如果您碰巧发现它更具可读性,则可以如下所示:

std::shared_ptr newCopy(sp, &sp[1]);