2011-09-08 85 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

不同的設備似乎是線程安全,因爲它們各自執行映射/緩衝區。多個線程寫入同一個設備,我不確定。 –