在我看来,以下代码(来自一些 C++ 问题)应该导致 UB,但似乎不是。这是代码:
#include <iostream>
using namespace std;
class some{ public: ~some() { cout<<"some's destructor"<<endl; } };
int main() { some s; s.~some(); }
答案是:
some's destructor
some's destructor
我从 c++ faq lite 中了解到,我们不应该显式调用析构函数。我认为在显式调用析构函数之后,应该删除对象 s 。程序完成后会自动再次调用析构函数,应该是UB。但是,我在 g++ 上进行了尝试,并得到与上述答案相同的结果。
是因为类太简单(不涉及新/删除)吗?或者在这种情况下根本不是UB?