如何在 C++ 中递增 shared_ptr?

How to increment shared_ptr in C++?

我从函数中得到 shared_ptr。 Shared ptr 指向一个大字节数组。我想 return 这个 shared_ptr 但是指向这个数组中的第 16 个字节。 原始指针示例(有效):

uint8_t* SomeFunction() {
  uint8_t* array = SomeOtherFunction();
  return array + 16;
}

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

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

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

我可以吗?怎么样?

可能会使用别名构造函数:

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