ファイルからバイトをロードし、バイト バッファーとバッファーの長さを含む FileData 構造体を返す関数を作成しました。
バッファーが消費されてスコープ外にスローされるとすぐにバッファーを削除したい。
さまざまなキャスト エラーのため、コンパイルに問題があります。また、バッファがコピーされているのではなく、正しく移動されているかどうかもわかりません。おそらく最大で 16 バイトなので、FileData 構造体自体がコピーされてもかまいません。
一般に、スマート ポインターをクラス/構造体フィールドとしてどのように使用しますか? それはあなたがすることでもありますか?
これは少し漠然とした質問ですが、私はスマート ポインター全般に関して概念的な問題を抱えているため、この例が正しい方向に役立つことを願っています。
ここに私がこれまでに持っているものがあります:
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>'