Llama al destructor y luego al constructor (restableciendo un objeto)

Quiero restablecer un objeto. ¿Puedo hacerlo de la siguiente manera?

anObject->~AnObject();
anObject = new(anObject) AnObject();
// edit: this is not allowed: anObject->AnObject();

Este código es obviamente un subconjunto del ciclo de vida típico de un objeto asignado en una nueva ubicación:

AnObject* anObject = malloc(sizeof(AnObject));
anObject = new (anObject) AnObject(); // My step 2.
// ...
anObject->~AnObject(); // My step 1.
free(anObject)
// EDIT: The fact I used malloc instead of new doesn't carry any meaning

Lo único que ha cambiado es el orden de las llamadas de constructor y destructor.

Entonces, ¿por qué en elsiguiente FAQ¿Aparecen todas las amenazas?

[11.9] ¿Pero puedo llamar explícitamente a un destructor si le he asignado un objeto nuevo a mi objeto?

Preguntas frecuentes: No puede, a menos que el objeto haya sido asignado con una nueva ubicación. Los objetos creados por nuevo deben eliminarse, lo que hace dos cosas (recuérdelos): llama al destructor y luego libera la memoria.

FQA: Traducción: eliminar es una forma de llamar explícitamente a un destructor, pero también desasigna la memoria. También puede llamar a un destructor sin desasignar la memoria. Es feo e inútil en la mayoría de los casos, pero puedes hacerlo.

La llamada destructor / constructor es obviamente un código C ++ normal. Las garantías utilizadas en el código resultan directamente de las nuevas garantías de colocación. Esel núcleo de la norma, es cosa de roca sólida. ¿Cómo puede llamarse "sucio" y presentarse como algo no confiable?

¿Crees que es posible que la implementación de nuevos y no colocados sea diferente? Estoy pensando en alguna posibilidad enfermiza, que la nueva regular, por ejemplo, puede poner el tamaño del bloque de memoria asignado antes que el bloque, lo que obviamente no sería suficiente con la nueva ubicación (porque no asigna memoria). Esto podría resultar en una brecha para algunos problemas ...¿Es posible tal nueva implementación ()?

Respuestas a la pregunta(10)

Su respuesta a la pregunta