Namespaces
Variants

Replacement functions

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Ciertas funciones para las cuales la implementación suministra una definición son reemplazables  . Un programa C++ puede proporcionar una definición con la firma de una función reemplazable, llamada función de reemplazo  . La función de reemplazo, si se proporciona, se utiliza en lugar de la versión predeterminada suministrada por la implementación. Dicho reemplazo ocurre antes del inicio del programa.

Si una declaración de la función de reemplazo no satisface alguna de las siguientes condiciones, el programa está mal formado, no se requiere diagnóstico:

Lenguaje del núcleo

Está definido por la implementación si el manejador de violación de contrato :: handle_contract_violation es reemplazable.

(desde C++26)

Biblioteca estándar

Las siguientes funciones de la biblioteca estándar son reemplazables, y la descripción de la semántica de la función se aplica tanto a la versión predeterminada definida por la biblioteca estándar de C++ como a la función de reemplazo definida por el programa:

funciones de asignación
(función)
funciones de liberación
(función)
verifica si un programa se está ejecutando bajo el control de un depurador
(función)

Ejemplo

Utiliza una función de asignación de reemplazo:

#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
}

Salida:

Replaced!