如何在C++中增加shared_ptr?

我从函数中得到了 shared_ptr。共享 ptr 指向一个大的字节数组。我想返回这个 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;
}

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

我可以做吗?如何?

回答

可以使用别名构造函数:

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


以上是如何在C++中增加shared_ptr?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>