如何在 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};
}
我从函数中得到 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};
}