Указатели на функции и callbacks
Callback позволяет алгоритму вызвать выбранную вызывающей стороной логику.
Что такое Указатели на функции и callbacks?
Callback позволяет алгоритму вызвать выбранную вызывающей стороной логику.
Передавайте поведение другой функции.
Важные моменты
- Указатель ссылается на живой совместимый объект или равен null.
- Каждое собственное выделение освобождается ровно один раз.
- Явно выражайте ownership и const.
Примеры кода на C и C++
main.c
#include <stdio.h>
int square(int value) { return value * value; }
int apply(int value, int (*operation)(int)) { return operation(value); }
int main(void) {
printf("%d\n", apply(6, square));
return 0;
}
36
C++
main.cpp
#include <functional>
#include <iostream>
int apply(int value, const std::function<int(int)>& operation) {
return operation(value);
}
int main() {
int factor = 6;
std::cout << apply(factor, [](int value) { return value * value; }) << '\n';
}
36
Сравнение C и C++
C использует явный тип function pointer; C++ предлагает lambdas и std::function с состоянием.
C
Ownership и очистка — соглашения, контролируемые программистом.
C++
Контейнеры и RAII связывают ownership и очистку с lifetime объекта.
Практические задания
Запустите обе версии и изменяйте их, сравнивая гарантии языков.
- Проверьте null и отказ выделения памяти.
- Используйте AddressSanitizer и UndefinedBehaviorSanitizer.
- Документируйте ownership каждого указателя.