Функции-замены
Некоторые функции, определения которых предоставляются реализацией, являются заменяемыми . Программа на C++ может предоставить определение с сигнатурой заменяемой функции, называемое функцией-заменой . Если функция-замена предоставлена, она используется вместо версии по умолчанию, предоставляемой реализацией. Такая замена происходит до запуска программы.
Если объявление функции-замены не удовлетворяет какому-либо из следующих условий, программа некорректна, при этом диагностика не требуется:
- Она не является встраиваемой.
- Она принадлежит глобальному модулю.
- Она имеет языковую связь C++.
- Она имеет тот же тип возвращаемого значения, что и заменяемая функция.
- Если заменяемая функция объявлена в заголовке стандартной библиотеки, такое объявление было бы допустимым повторным объявлением объявления в этом заголовке.
Ядро языкаЗависит от реализации, является ли обработчик нарушения контракта | (начиная с C++26) |
Стандартная библиотека
Следующие функции стандартной библиотеки являются заменяемыми; описание семантики функций применимо как к версии по умолчанию, определённой стандартной библиотекой C++, так и к функции-замене, определённой программой:
| функции выделения памяти (функция) |
|
| функции освобождения памяти (функция) |
|
|
(C++26) | проверяет, выполняется ли программа под управлением отладчика (функция) |
Пример
Используется функция-замена для выделения памяти:
#include <cstddef>
#include <new>
#include <print>
// replacement function
void* operator new(std::size_t count)
{
std::print("Replaced!");
return nullptr;
}
int main()
{
int* ptr = new int; // invokes the replacement version defined by the program
}
Вывод:
Replaced!
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/replacement_function