gpt4 book ai didi

c++ - 如何在 std::shared_ptr 之间设置/获取 unsigned char *?

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:45 26 4
gpt4 key购买 nike

我想设置 unsigned char*数据到std::shared_ptr<uint8_t>并将该指针传递给一个函数,并且在该函数中我想获得 unsigned char*数据来自 std::shared_ptr<uint8_t> .

其实我想读取图像数据如下。

FILE *fp=fopen("/data/FR/AjayPatil.jpg","rb");
if(fp)
{
fseek(fp, 0, SEEK_END);
data_size=ftell(fp);
fseek(fp, 0, SEEK_SET);
jdata=( unsigned char *)malloc(data_size+1);
if (!jdata)
{
fclose(fp);
return;
}
fread(jdata, data_size, 1, fp);
fclose(fp);
}

现在我在 jdata 中有数据如你所见。那么如何将这些数据复制到 std::shared_ptr<uint8_t> 中呢? ?

我的图片结构如下。

  typedef struct Image 
{
uint16_t width;
uint16_t height;
uint8_t depth;
std::shared_ptr<uint8_t> data;
}

另外,成功复制数据后,以下是取回数据的正确方法吗?

     unsigned char *imagedata=data.get(); // here data means std::shared_ptr<uint8_t> data;

最佳答案

image的数据成员 data在下面的代码中是一个空的 std::shared_ptr<uint8_t> (没有要管理的对象):

Image image;

设置要管理的对象

通过调用 std::shared_ptrreset()成员函数,您可以将托管对象设置为什么 jdata指向:

image.data.reset(jdata, free);

请注意,您必须提供 free作为删除器,因为 jdata 指向的数据通过 malloc 分配:

jdata=(unsigned char *)malloc(data_size+1);

不提供free因为 删除器 会导致 delete (即:默认删除器)正在 data 使用的破坏。

获取托管对象

为了获得指向托管对象的指针,您可以调用 std::shared_ptrget()成员函数:

auto imagedata=data.get(); 

关于c++ - 如何在 std::shared_ptr<uint8_t> 之间设置/获取 unsigned char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com