如何在 C++ 中增加 shared_ptr?

0 c++ memory arrays stl shared-ptr

我从函数中得到了 shared_ptr。共享 ptr 指向一个大的字节数组。我想返回这个 shared_ptr 但将它指向这个数组中的第 16 个字节。带有原始指针的示例(工作):

uint8_t* SomeFunction() {
  uint8_t* array = SomeOtherFunction();
  return array + 16;
}
Run Code Online (Sandbox Code Playgroud)

使用共享指针的示例(不起作用):

std::shared_ptr<uint8_t[]> SomeFunction() {
  std::shared_ptr<uint8_t[]> array = SomeOtherFunction();
  return array + 16;
}
Run Code Online (Sandbox Code Playgroud)

我不想重新分配数组,因为它很大而且重新分配需要时间。我想返回相同的共享 ptr,但它的get()方法将返回raw pointer+16。但在原始指针地址处释放内存。

我可以做吗?如何?

Jar*_*d42 5

可以使用别名构造函数:

std::shared_ptr<uint8_t[]> SomeFunction() {
  std::shared_ptr<uint8_t[]> array = SomeOtherFunction();
  return {array, array.get() + 16};
}
Run Code Online (Sandbox Code Playgroud)