继续问 关于CArchive()构造函数第二个参数 bNoFlushOnDelete属性

heiheizh618 2009-08-19 06:01:42
我查了下MSDN,以下是相关描述:
CArchive::bNoFlushOnDelete
Prevents the archive from automatically calling Flush when the archive destructor is called. If you set this flag, you are responsible for explicitly calling Close before the destructor is called. If you do not, your data will be corrupted.

这个属性设置的目的是 在对象析构之前,自己显式调用CArchive::Close()函数;

但是Close()函数的作用是:
Flushes any data remaining in the buffer, closes the archive, and disconnects the archive from the file.
这里也是需要清除缓冲的。


问题是:什么情况下要设置这个属性,为什么要设置这个属性?
...全文
142 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
heiheizh618 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 airry 的回复:]
作用是防止不可预料的错误,如出现异常,此时析构函数调用flash函数的话会导致保存或读入错误的数据
[/Quote]

哇,,精辟啊。原来这么简单。赫赫~~
谢谢了~~分都给你拉~
airry 2009-08-19
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/157073/zh-tw
析构函数中清楚缓存是不可控制的,不能完全确定是否完成了要求的操作,最好能通过flash或close函数清除缓存
airry 2009-08-19
  • 打赏
  • 举报
回复
作用是防止不可预料的错误,如出现异常,此时析构函数调用flash函数的话会导致保存或读入错误的数据
heiheizh618 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 airry 的回复:]
CArchive类在析构时会自动调用Flush清楚缓存,bNoFlushOnDelete 标记设置后析构函数不会自动调用Flush,因此需要在析构前调用close以实现缓存数据的保存。bNoFlushOnDelete 一般和其他两项配合一起用
[/Quote]

既然无论如何都是要清除缓存的,那何必设置这样一个属性来区分呢?
请问为什么要设置这么一个属性呢?这两种情况有什么 除了调用Close()/Flush()位置不同外 还有什么不同?
airry 2009-08-19
  • 打赏
  • 举报
回复
CArchive类在析构时会自动调用Flush清楚缓存,bNoFlushOnDelete 标记设置后析构函数不会自动调用Flush,因此需要在析构前调用close以实现缓存数据的保存。bNoFlushOnDelete 一般和其他两项配合一起用

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧