2011-09-08 83 views
1

从文档中我可以看出,它们不是,另一方面,RAII是现代cpp的特征之一。增强映射文件RAII?

http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/classes/mapped_file.html

编辑:事实证明,答案是肯定的,但请请不要忘记使用.is_open()。

+0

[Boost.Interprocess](http://www.boost.org/libs/interprocess/)'内存映射文件肯定是** RAII;不知道关于Boost.IOStreams。 : - [ – ildjarn

+1

不幸的是,关于[*§3.7对象生命周期*](http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/guide/lifetimes.html)部分的文档只有这个说:“[要在下一个版本中提供]”:( –

回答

3

纵观实施,mapped_source/mapped_sink都包含一个共享指针底层mapped_file_impl (See here for the mapped_file_impl source)

正如你所看到的,一旦最后引用被破坏,它调用从映射文件分离析构函数。但是,它不会销毁映射文件,只不过是销毁一个ofstream删除底层文件。

+0

Tnx,顺便说一句,你知道,如果他们是线程安全的,多个线程可以同时写入到differenf文件? – NoSenseEtAl

+1

不同的设备似乎是线程安全,因为它们各自执行映射/缓冲区。多个线程写入同一个设备,我不确定。 –