我能否显式调用 属性 析构函数,以便我可以看到是哪一个导致了问题?

Can I explicitly invoke property destructors so that I can see which one causes problems?

我想这是一个非常讨厌的问题 - 似乎我的 class 的 属性 析构函数之一造成了死锁。 属性 个析构函数在 class 个析构函数之后自动调用。而且我想手动调用它们并在每个成功后创建一个日志条目。

问题只出现在设备上,无法使用调试器,所以我改用日志。

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

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

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

你可以做的是将io声明为一个指针并用new动态分配它。然后调用 delete io 并监视那里发生的情况。

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