NewSocketException():
SocketException NewSocketException(string callstack,Socket* socket)
{
SocketException se;
se.callStack = callstack;
se.message = GetLastWinsockErrorMessage(&se.code);
if (socket != nullptr)
se.socket = new Socket(*socket);
return se;
}
NewSocketException()
应该为我制作SocketException
结构并返回它。执行se.~SocketException()
时,C ++调用se.socket
(删除return se;
)。我想那是因为se
超出了范围,但它也被退回了,所以我不确切地知道这里发生了什么。这一行完成后:
SocketException se = NewSocketException("accept() in AcceptThread()",server);
se
包含正确的字符串(通过踩到我注意到字符串也被~basic_string()销毁但是当函数返回时它们仍然存在)并且正确(相同)指针值但objet(se。 socket)仍然被破坏。为什么要调用析构函数?为什么我的对象消失了,字符串仍在那里?
答案 0 :(得分:1)
您正在从函数返回局部变量se
,并且当您的代码到达函数的最后一个大括号时,其范围结束。所以它会叫destroctor。
要解决此问题,请在调用函数之前定义变量,并将其作为参数传递给函数。
SocketException se;
void NewSocketException(string callstack,Socket* socket, SocketException &se)
{
se.callStack = callstack;
se.message = GetLastWinsockErrorMessage(&se.code);
if (socket != nullptr)
se.socket = new Socket(*socket);
}