【发布时间】:2013-11-29 11:44:10
【问题描述】:
如何将此代码放入函数中,以便传递文件路径并将文件映射的字节返回到 char 数组?每当我尝试过,一旦函数完成,我就永远无法读取内容?
using boost::interprocess;
using boost;
boost::shared_ptr<char> getBytes(const char* FilePath){
shared_ptr<file_mapping> fm(new file_mapping(FilePath, read_only));
shared_ptr<mapped_region> region(new mapped_region(*fm, read_only));
shared_ptr<char> bytes(static_cast<char*>(region->get_address()));
return bytes;
}
【问题讨论】:
-
Hmya,RAII 在这里不是你的朋友。当函数返回时,那个 file_mapping 是奇闻趣事。这需要进行重大的重写,例如您返回的一个小助手类,它存储 file_mapping 和 mapped_region 以便它们能够生存。
-
所以你是说有一个字节数组是数据成员的类,并且可能是文件在构造函数中被映射?
-
是的,类似的。 shared_ptr 的这种用法是货物崇拜,您正在努力解决基础问题。取得成功的最好方法是暂时不要使用它:)
标签: c++ memory-management boost file-mapping