Можно ли использовать 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()
?
submit_btt = Button()
корректно вызывает деструктор старой кнопки и конструктор новой. На самом деле это должно происходить даже без перегрузкиoperator=
. - person Matthias247   schedule 30.03.2017Button submit_btt;
больше не полиморфная кнопка. - person apple apple   schedule 30.03.2017&submit_btt
. Это относится к ячейке памяти с фиксированным размером выделенияsizeof(Button)
. - person Konrad Rudolph   schedule 30.03.2017button
и поместить ее базу в&submit_btt
. Но все же, ничего похожего на присвоение полиморфных объектов по значению я не встречал даже при работе с динамической памятью. Пожалуйста, покажите мне. :) - person Karolis Milieška   schedule 30.03.2017Button*
.std::unique_ptr<Button*>
.Button&
. и Т. Д. - person Konrad Rudolph   schedule 30.03.2017