我编写了一个函数,它从文件中加载字节并返回一个包含字节缓冲区和缓冲区长度的 FileData 结构。
我希望缓冲区在被消耗并超出范围后立即被删除。
由于各种转换错误,我无法编译它。另外,我不确定缓冲区是否被正确移动而不是被复制。我不介意 FileData 结构本身被复制,因为它最多可能是 16 个字节。
一般来说,您如何将智能指针用作类/结构字段?这甚至是你会做的事情吗?
我知道,这是一个有点模糊的问题,但是由于我在一般意义上对智能指针有一些概念上的困难,我希望这个例子能帮助我朝着正确的方向前进。
这是我到目前为止所得到的:
struct FileData
{
unique_ptr<char[]> buf;
unsigned int len;
};
FileData LoadFile(string filename)
{
ifstream str;
str.open(filename, ios::binary);
str.seekg(0, ios::end);
auto len = str.tellg();
str.seekg(0, ios::beg);
char* buf = new char[len];
str.read(buf, len);
str.close();
FileData d = { unique_ptr<char[]>(buf), len };
return d;
}
编辑:由于有些人对我使用此当前代码得到的错误消息感到好奇,所以这里是:
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'