0

我想这是一个非常讨厌的问题 - 似乎我班级的属性析构函数之一造成了僵局。属性析构函数在类析构函数之后自动调用。而且我想手动调用它们并在每个成功后进行日志条目。

该问题仅发生在无法使用调试器的设备上,因此我改用日志。

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()被调用了两次

那么有没有办法正确地做到这一点?如果没有,调试析构函数的替代方法是什么?

4

1 回答 1

1

你不能像那样改变编译器的行为。编译器将扩​​充析构函数以破坏嵌套对象。

您可以做的是声明io为指针并使用new. 然后打电话delete io并监视那里发生的事情。

其他解决方案只是在析构函数上放置一个断点,io并跟踪销毁时发生的情况。这可能是最好的主意。

于 2015-11-03T12:07:31.673 回答