【发布时间】:2017-09-15 17:07:12
【问题描述】:
MSDN 给出了排除网络错误的示例:
MyData md;
try {
// Code that could throw an exception
md = GetNetworkResource();
}
catch (const networkIOException& e) {
// Code that executes when an exception of type
// networkIOException is thrown in the try block
// ...
// Log error message in the exception object
cerr << e.what();
}
catch (const myDataFormatException& e) {
// Code that handles another exception type
// ...
cerr << e.what();
}
我正在将一段 C 代码转换为 C++,但不确定如何合并此代码:
if (WSAStartup(0x202, &wsaData) == SOCKET_ERROR)
{
fputs("\r\n WSAStartup failed", smtpfile);
WSACleanup();
return -1;
}
进入try catch块
C++ 新手,请原谅我的无知。提前感谢您的帮助。
【问题讨论】:
-
第二个代码块中的任何内容都不会引发异常,因此相对于 try/catch 块而言,它的去向并不重要。但是第一个代码块中的那个例子很糟糕。如果
GetNetworkResource();抛出异常,它允许md被访问和未初始化的可能性。一个更好的例子是try { MyData md; // Code that could throw an exception md = GetNetworkResource(); },这样md就不会在GetNetworkResource失败的范围内。 -
另外,当
WSAStartup()失败时调用WSACleanup()是非常糟糕的,特别是如果WSAStartup()之前已经被调用过。除非WSAStartup()成功,否则不要调用WSACleanup()。
标签: c++ .net sockets try-catch