我正在实现一个Zip包装器(zlib miniZip),并问自己应该如何做
正确处理异常。我在想三个版本。哪一个会
你更喜欢,还是有我没想到的版本?
功能的任务
Install
从Web服务器获取zip文件,
解压缩其内容并删除下载的zip文件。但是如果一个错误
在解压缩文件时发生,应在何处删除zip文件?
你的经验坦克。
版本A(在功能外删除):
void Install() {
getFile("upd.zip"); // Creates File
MyZip myzip("upd.zip");
myzip.unzip(); // Can't do its job --> Exception
delete("upd.zip"); // In case of exception: File would not be deleted here
}
int main() {
try {
Install();
}
catch (const Error& err) {
delete("upd.zip"); // File must be deleted here
MessageBox(err.text);
}
}
版本B(重新引发异常)
void Install() {
getFile("upd.zip"); // Creates File
try {
MyZip myzip("upd.zip");
myzip.unzip();
}
catch (const Error& err) {
delete("upd.zip");
throw err; // Re-Throw the Error
}
delete("upd.zip");
}
int main() {
try {
Install();
}
catch (const Error& err) {
MessageBox(err.text);
}
}
版本C(带返回代码)
void Install() {
getFile("upd.zip"); // Creates File
MyZip myzip("upd.zip");
if (!myzip.unzip("upd.zip")) {
delete("upd.zip");
throw Error(myzip.geterror()); // what was the reason
}
delete("upd.zip");
}
int main() {
// Same as in Version B
}