Почему запрещено брать адрес деструктора? - PullRequest
24 голосов
/ 26 октября 2011
Стандарт

C ++ в 12.4.2 гласит, что

[...] Адрес деструктора не берется.[...]

Однако компилятор может без каких-либо претензий получить адрес обертки вокруг деструктора класса, например:обоснование запрета принимать адрес деструктора напрямую?

1 Ответ

17 голосов
/ 26 октября 2011

Конструкторы и деструкторы являются чем-то особенным. Компилятор часто использует различные соглашения при вызове их (например, для передачи дополнительных скрытых аргументы). Если вы взяли адрес и сохранили его где-то, компилятор потеряет информацию о том, что функция является конструктором или деструктор, и не знал бы использовать специальные соглашения.

...