私の意見では、次のコード(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ライトで、デストラクタを明示的に呼び出すべきではないことを学びました。デストラクタを明示的に呼び出した後、オブジェクトを削除する必要があると思います。プログラムは、終了時に自動的にデストラクタを再度呼び出します。これはUBである必要があります。しかし、g ++で試してみたところ、上記の答えと同じ結果が得られました。
クラスが単純すぎる(新規/削除が含まれない)ためですか?それとも、この場合はUBではありませんか?