我想这是一个非常讨厌的问题 - 看起来我班级的属性析构函数之一会造成死锁。在类析构函数之后自动调用属性析构函数。我想手动调用它们,并在每一个成功后进行日志记录。
问题只出现在无法使用调试器的设备上,因此我使用的是日志。
Client::~Client() {
// Stops io service and disconnects sockets
exit();
LOG("io_service stopped"<<endl);
// Destroy IO service
io_.~io_service();
LOG("io_service destroyed"<<endl);
}
但上面的代码实际上会导致异常,因为~io_service()
被称为两次。
有没有办法正确地做到这一点?如果没有,那么调试析构函数的替代方法是什么?
答案 0 :(得分:1)
您不能像这样改变编译器行为。编译器将扩充析构函数以破坏嵌套对象。
您可以做的是将io
声明为指针,并使用new
动态分配它。然后拨打delete io
并监控那里发生的事情。
其他解决方案就是在io
析构函数上放置一个断点,并跟踪破坏时发生的情况。这可能是最好的主意。