删除 boost 存档对象也会删除与其关联的流?

deleting boost archive object also deletes stream associated to it?

在我的代码中,我必须保留一个持久的 boost::oarchive 对象来写入。所以我有一个 writer class 保持 ostream 的指针和 boost::oarchive 指针说 -

ofstream *fs = new ofstream();

boost::archive::binary_oarchive *afs = new boost::archive::binary_oarchive( *fs );

我在销毁它们时遇到问题。这是我在 clear 函数中所做的释放对象的操作 -

delete fs;

delete afs; #valigrind 抛出无效读取

Valgrind 在此处破坏 'afs' 时抛出无效读取错误 - 'delete fs' 不需要 吗?删除 boost 对象是否足以释放 ofstream 对象?

存档可能想在自毁之前将某些内容刷新到文件流,但您已经关闭了文件流。

所以,先删除存档,然后再删除你的 ofstream。

在大多数情况下,按照与构造相反的顺序销毁依赖对象是安全的。