2009-08-13 9 views

Respuesta

11

Debido norma dice que es legal, aunque peligrosa: 5.3.5

Si el objeto se va a eliminar tiene tipo de clase incompleta en el punto de eliminación y la clase completa tiene un destructor no trivial o una función de desasignación , el comportamiento es undefined.

+0

... lo que significa que cuando el destructor del tipo es trivial, es legal. Como el compilador no conoce el tipo, no sabe si el destructor es trivial o no, y no puede decidir si el comportamiento es indefinido o no. – Suma

5

Recibirá esta advertencia como resultado de la declaración directa. Así que el compilador ha reconocido que es estructura/clase, pero no está seguro acerca de la invocación del destructor.

El sentido de advertencia más posible se refiere al segundo paso del código analizado por msvc. Cuando se resuelve la última clase, el compilador puede tomar una decisión si existe un destructor.

2

Es legal en C++, aunque a menudo es una mala idea.

En general, el Nivel de advertencia 1 es del tipo "podría sorprender, pero ignoré lo que dijo allí", y algunas afirmaciones seleccionadas donde el código generado es muy probable incorrecto y propenso a bloqueos.

Así que WL 2 es apropiado, ya que es legal y en muchos escenarios está bien borrar un tipo incompleto.

Por supuesto, ese razonamiento es solo una suposición educada. Tal vez Microsoft rodó los dados para asignar este nivel de advertencia.

+0

'Tal vez Microsoft tiró los dados a este cedida level.' advertencia: D –

Cuestiones relacionadas