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

Certaines fonctions pour lesquelles une définition est fournie par l'implémentation sont remplaçables  . Un programme C++ peut fournir une définition avec la signature d'une fonction remplaçable, appelée fonction de remplacement  . La fonction de remplacement, si elle est fournie, est utilisée à la place de la version par défaut fournie par l'implémentation. Ce remplacement se produit avant le démarrage du programme.

Si une déclaration de la fonction de remplacement ne satisfait à aucune des conditions suivantes, le programme est mal formé, aucun diagnostic n'est requis :

Langage de base

Il est défini par l'implémentation si le gestionnaire de violation de contrat :: handle_contract_violation est remplaçable.

(depuis C++26)

Bibliothèque standard

Les fonctions standards suivantes de la bibliothèque sont remplaçables, et la description de la sémantique des fonctions s'applique à la fois à la version par défaut définie par la bibliothèque standard C++ et à la fonction de remplacement définie par le programme :

fonctions d'allocation
(fonction)
fonctions de désallocation
(fonction)
vérifie si un programme s'exécute sous le contrôle d'un débogueur
(fonction)

Exemple

Utilise une fonction d'allocation de remplacement :

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

Sortie :

Replaced!