class FooView final : public Something
{
...
void refresh()
{
this->~FooView();
new (this) FooView();
}
}
Nunca he visto este idioma, y parece que podría ser muy sutil y desordenado, pero en realidad no puedo pensar en un problema con él (mientras FooView
sea definitivo). ¿Es una mala idea?
c++
placement-new
luqui
fuente
fuente
Respuestas:
Puede hacerlo, pero necesitará lavado de memoria para eso si tiene miembros de referencia o constantes, o si cambia el tipo de clase.
Considera esto:
Para evitar este comportamiento indefinido, debe lavar la memoria utilizando
std::launder
. El compilador asumirá que la vida útil defv
no se verá afectada por nada, excepto}
. El lavado hará que el compilador suponga que hay un objeto, no relacionado confv
:Ahora es una buena idea? Aconsejaría en contra, ya que puede generar confusión, pero se puede hacer de manera segura.
fuente