zumwalt tortugas modernos guerra destructores crucero clase buque barco acorazado c++ pointers destructor standards

c++ - tortugas - destructor zumwalt



¿Por qué está prohibida la dirección de un destructor? (1)

Los constructores y los destructores son algo especiales. El compilador a menudo utiliza diferentes convenciones cuando los llama (por ejemplo, para pasar argumentos ocultos adicionales). Si tomó la dirección y la guardó en algún lugar, el compilador perdería la información de que la función es un constructor o un destructor, y no sabría usar las convenciones especiales.

El estándar C ++ en 12.4.2 establece que

[...] La dirección de un destructor no se tomará. [...]

Sin embargo, uno puede sin quejas por parte del compilador tomar la dirección de un contenedor alrededor de un destructor de clase, como este:

struct Test { ~Test(){}; void destructor(){ this->~Test(); } }; void (Test::*d)() = &Test::destructor;

Entonces, ¿cuál es el razonamiento detrás de prohibir tomar la dirección de un destructor directamente?