2010-03-23 19 views

Respuesta

4

Sí, estrictamente cuando usa delete[] el tipo estático del puntero que delete[] debe coincidir con el tipo de la matriz que asignó originalmente o si obtiene un comportamiento indefinido.

Normalmente, en muchas implementaciones, delete[] solicitó un void* que en realidad es una matriz de un tipo que no tiene trabajos de destrucción no triviales, pero no está garantizada.

delete[] buffer 

o

delete[] (char*)something 

ambos serían válidos.

5

Sí.

Del patrón (5.3.5 Borrar):

El valor del operando de borrado será el valor del puntero, que el resultado de una serie anterior nueva expression.72) Si no es así, el comportamiento no está definido. [Nota: esto significa que la sintaxis de la expresión de eliminación debe coincidir con el tipo del objeto asignado por new, y no con la sintaxis de la nueva expresión. ]

En la primera alternativa (eliminar objeto), si el tipo estático de la operando es diferente de su dinámica tipo, el tipo estático será una clase base de dinámica de tipo del operando y la estática type tendrá un destructor virtual o el comportamiento es undefined. En la segunda alternativa (eliminar array) si el tipo dinámico de el objeto que se desea borrar difiere de su tipo estático, el comportamiento es indefinido *.

** Esto implica que un objeto no se puede eliminar con un puntero de tipo void * porque no hay objetos de tipo void.

+0

No solo el valor del operando es del tipo, vea el párrafo siguiente en 5.3.5 (3). –

+0

@Charles Bailey Fixed. – sinek

Cuestiones relacionadas