Spec-Zone.ru › C++

Функции-замены

Некоторые функции, определения которых предоставляются реализацией, являются заменяемыми . Программа на C++ может предоставить определение с сигнатурой заменяемой функции, называемое функцией-заменой . Если функция-замена предоставлена, она используется вместо версии по умолчанию, предоставляемой реализацией. Такая замена происходит до запуска программы.

Если объявление функции-замены не удовлетворяет какому-либо из следующих условий, программа некорректна, при этом диагностика не требуется:

  • Она не является встраиваемой.
  • Она принадлежит глобальному модулю.
  • Она имеет языковую связь C++.
  • Она имеет тот же тип возвращаемого значения, что и заменяемая функция.
  • Если заменяемая функция объявлена в заголовке стандартной библиотеки, такое объявление было бы допустимым повторным объявлением объявления в этом заголовке.

Ядро языка

Зависит от реализации, является ли обработчик нарушения контракта ::handle_contract_violation заменяемым.

(начиная с C++26)

Стандартная библиотека

Следующие функции стандартной библиотеки являются заменяемыми; описание семантики функций применимо как к версии по умолчанию, определённой стандартной библиотекой C++, так и к функции-замене, определённой программой:

operator newoperator new[]
функции выделения памяти
(функция)
operator deleteoperator delete[]
функции освобождения памяти
(функция)
is_debugger_present
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API