【发布时间】:2021-09-07 21:34:50
【问题描述】:
我有一个库,其中包含一个返回以下内容的函数:
std::shared_ptr<const uint8_t[]>
and
uint32_t size
我需要将它传递给另一个 API,该 API 需要:
std::vector<uint8_t> data
shared_ptr 中包含的数据与需要进入 vector 的数据完全相同,因此 move 操作是理想的.
所以我的问题是:有什么方法可以在不复制数据的情况下获得它?我意识到问题在于 shared_ptr 一旦超出范围就会删除数据,所以我想知道是否有办法绕过这个问题。
(如果需要复制,那么最有效的方法是什么?我在想 std::copy 或 good'ol' memcpy。)
【问题讨论】:
-
也许你的意思是
shared_ptr<const uint8_t[]>? -
@AyxanHaqverdili 这是一个指向字节数组开头的指针。
-
fwiw,从对象中删除移动完全没问题。你试图规避的不是问题
-
最好的复制方式是
vector<uint8_T> data( ptr.get(), ptr.get() + size )
标签: c++ vector std shared-ptr