【发布时间】:2011-08-21 20:26:58
【问题描述】:
我有以下情况。
这是一个代码 sn-p,经过编辑以演示问题。
ifstream ifs("empty_file");
if(!ifs.is_open()) {
ui.display("Error: Unable to open file \"empty_file\"\n");
return;
}
archive::text_iarchive ia(ifs);
try {
ia >> some_class;
} catch (...) {
ui.display("This should catch ever single exception\n");
}
empty_file 确实是一个完全空的文件。这应该会导致错误;它确实如此。问题是我无法捕获 boost 引发的异常,并滥用用户给我一个空/损坏的文件来加载。
相反,我得到以下信息:
Loading...
terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): invalid signature
Aborted
据我所知,catch(...) 应该捕获所有存在的异常。我做错了什么,还是 boost::serialisation 只是在我有机会做任何事情之前捕获了它自己的异常并 abort()ing?
如果是后者,那只是我的问题还是那真的很糟糕的设计?您的整个程序不应仅因损坏的加载文件而崩溃(中止())。我该怎么办?
【问题讨论】:
标签: c++ exception serialization boost archive