如何在std :: shared_ptr <uint8_t>之间设置/获取unsigned char *?

时间:2017-09-14 10:11:42

标签: c++ c++11 pointers

我想将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;

1 个答案:

答案 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()