gpt4 book ai didi

c++ - 捕获 boost 序列化存档异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:04 24 4
gpt4 key购买 nike

我有以下情况。

这是一个代码片段,经过编辑以演示问题。

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)。我能做些什么呢?

最佳答案

可能异常是构造函数抛出的。尝试在 try 中构建您的 text_iarchive 对象,如下所示:

try {
archive::text_iarchive ia(ifs);
ia >> some_class;
} catch (...) {
ui.display("This should catch every single exception\n");
}

假设捕获了异常,您当然希望捕获 boost::archive::archive_exception 而不是 ...

关于c++ - 捕获 boost 序列化存档异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com