Обычно функция-ловушка — это функция, которая вызывается, когда происходят определенные события.

Существует много дискуссий о различиях между функцией-ловушкой и функцией обратного вызова. Ответ зависит от разных языков программирования. По моему собственному опыту, функция обратного вызова обычно регистрируется через низкоуровневые API, такие как sigaction().

Возможно, мы с вами использовали функции-ловушки еще до того, как узнали термин перехватчик.

Возьмем в качестве примера виртуальную функцию на C++. Компилятор не знает, какую производную функцию следует вызывать. Следовательно, среда выполнения C++ должна заменить содержимое указателя функции на основе функции правильной функцией в таблице виртуальных функций.

В этом красота полиморфизма.

Нам не нужно напрямую вызывать производные функции. Среда выполнения C++ помогает нам находить и вызывать правильные функции.

Дополнительные примеры приведены ниже.

  • Таблица виртуальных функций в C++
  • MEM_CHECK_ в glibc
  • LD_PRELOAD