новый / удалить «переопределить» против «перегрузки» - PullRequest
5 голосов
/ 18 сентября 2010

Я всегда думал ...

  • переопределение означает переопределение функции (той же подписи) в базовом классе, тогда как
  • перегрузка означает реализацию функции с тем же именем, но с другой подписью

... и запутался, потому что иногда людям просто наплевать на разницу.

Относительно нового / удаления: они перегружены или переопределены?

Идея:

  • реализация оператора new / delete в классе = перегрузка
  • переопределение глобального new / delete = override

Есть ли исправления / предложения / возражения? И не стесняйтесь отмечать вопрос "расчесывание волос" ...

1 Ответ

7 голосов
/ 18 сентября 2010

Для глобальных operator new и operator delete на самом деле это ни перегрузка, ни переопределение. Программе разрешено заменять определения по умолчанию, предоставляемые реализацией, на свои собственные определения. Стандарт C ++ гласит (§3.7.3 / 2):

Библиотека предоставляет определения по умолчанию для глобальных функций выделения и освобождения. Некоторые глобальные функции распределения и освобождения являются заменяемыми (18.4.1). Программа на C ++ должна содержать не более одного определения заменяемой функции выделения или освобождения. Любое такое определение функции заменяет версию по умолчанию, предоставленную в библиотеке (17.4.3.4).

Для класса operator new или operator delete операторы перегружены .

...