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?