С++ 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
деструктор?