我想将unsigned char*
数据设置为std::shared_ptr<uint8_t>
并将该指针传递给函数,并且在该函数中我想从unsigned char*
获取std::shared_ptr<uint8_t>
数据。< / p>
其实我想读取图像数据如下。
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;
答案 0 :(得分:2)
以下代码中的image
数据成员data
为空std::shared_ptr<uint8_t>
(无管理对象):
Image image;
通过调用std::shared_ptr
reset()
成员函数,您可以将托管对象设置为jdata
指向的对象:
image.data.reset(jdata, free);
请注意,您必须提供free
作为删除,因为jdata
指向的数据是通过malloc
分配的:
jdata=(unsigned char *)malloc(data_size+1);
不提供free
作为删除会导致在delete
使用data
(即:默认删除)的破坏。
要获取指向托管对象的指针,您可以调用std::shared_ptr
的{{1}}成员函数:
get()