c++ - 从数组的共享指针访问共享指针

标签 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,并想制作单独的拷贝或与其他共享 ptr 共享。

类似的东西

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

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

如果问题不清楚,请告诉我。

最佳答案

使用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]);

关于c++ - 从数组的共享指针访问共享指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39820362/

相关文章:

c++ - 从键码中获取键名(X11 XGrabKey)

c++ - 后续: What exactly is a variable in C++14/C++17?

c++ - g++ 不允许在 lambda 中通过引用广义捕获 const 对象?

c++ - 从函数调用返回后,来自 std::vector 引用的数据损坏

c++ - 这段代码中如何发生内存泄漏

c++ - 删除共享指针

c++ - 如何将 ostream 重定向到 Boost Log 库

c++ - Qt 中具有高度依赖函数的单元测试

java - 将 'bits' 写入 C++ 文件流

c++ - 使期望单个模板参数的模板模板参数的类接受可变模板参数的模板模板参数?