C++ размещение новых для локальных объектов
Это нормально использовать placement new
для автоматических объектов? Пожалуйста, рассмотрите следующий пример:
class Button
{
public:
Button() { }
virtual ~Button() { }
// and a lot of members
};
class Screen
{
public:
Screen() { }
virtual ~Screen() { }
Button submit_btt;
void doStuff()
{
// ...
submit_btt.~Button();
new(&submit_btt) Button();
//...
}
// and a lot of members
};
void process(void)
{
Screen myObj;
//...
myObj.doStuff();
//...
}
Этот псевдокод представляет ситуацию, которая встречалась при работе с графическим интерфейсом.
Что вы думаете об этом коде? Есть ли проблемы с безопасностью? Что может пойти не так? Будет myObj
и его 'члены будут должным образом уничтожены (все вызываемые деструкторы-члены и все другие операции) после process()
функционировать?