C++11 では、標準のレイアウト タイプを使用できるようになりましたunion
。共用体のメンバーにはユーザー定義のコンストラクターがあります
私の質問は次のとおりunion
です。範囲外になったときにカスタムデストラクタが呼び出されることは保証されていますか?
私の理解では、切り替え時に手動で破棄および構築する必要があります: http://en.cppreference.com/w/cpp/language/union#Explanation
しかし、次のような例はどうでしょうか。
{
union S { string str;
vector<int> vec;
~S() {} } s = { "Hello, world"s };
}
範囲外になった場合、のデストラクタs
を呼び出していないため、ヒープに割り当てられた文字列のメモリ リークが発生したのでしょうか。string