#cpp #stackoverflow
Ответ: нет.
Как и писали в комментариях, могут возникнуть вопросы при использовании объекта, переконструированного на стеке. Однако таких не будет.
Давайте рассмотрим случай not trivially destructible типа. При данном коде деструктор будет вызван лишь единожды, что может привести к утечкам памяти, если класс имеет своими полями некоторые указатели. Потому необходимо сделать явный вызов деструктора, после чего уже можно использовать placement new на это место.
Кто-то скажет, что использование объекта после вызова деструктора по стандарту является неопределённым поведением, но в данном случае мы используем не сам объект, а его storage.
Вот ссылка на вопрос с so, где сообщество поясняло мне за этот случай: https://stackoverflow.com/questions/69062579/is-using-placement-new-with-variable-on-the-stack-is-correct
Post #45
365
this->notes. #cpp #poll Предположим, имеем такой код: int x(1); new(&x) int(5); Вызывает ли этот код undefined behaviour? (можно пояснить свой ответ в комментариях 🙂 ) Ответ выложу завтра.Stack Overflow Is using placement new with variable on the stack is correct? Let's take a look to this code: A a(123); new(&a) A(124); Test says that in this case when program is shutting down destructor ~A() will called once. So if in A we has some pointers as fields we