Les paramètres de pointeur de fonction en C++ peuvent utiliser deux méthodes d'allocation de mémoire : l'allocation dynamique ou l'allocation statique. L'allocation dynamique utilise la mémoire tas et alloue et libère de la mémoire au moment de l'exécution ; l'allocation statique utilise la mémoire de pile et alloue de la mémoire au moment de la compilation.
Les pointeurs de fonction sont un outil puissant en C++ qui nous permet de traiter les fonctions comme des citoyens de première classe. Cela signifie que nous pouvons transmettre des pointeurs de fonction vers d'autres fonctions, les stocker dans des structures de données ou même les créer dynamiquement.
Lorsque nous utilisons des pointeurs de fonction comme paramètres, nous devons prendre en compte la méthode d'allocation de mémoire. Il existe deux méthodes principales :
Si nous ne sommes pas sûrs du type spécifique du pointeur de fonction ou si nous souhaitons modifier la valeur du pointeur de fonction au moment de l'exécution, nous pouvons utiliser l'allocation dynamique. L'allocation dynamique utilise la mémoire tas, par exemple :
// 创建一个指向函数的指针 int (*func_ptr)(int); // 动态分配函数指针指向的内存 func_ptr = new int(*)(int)([](int x) { return x * x; }); // 调用函数指针 int result = func_ptr(5);
L'allocation statique peut être utilisée si nous connaissons exactement le type du pointeur de fonction et n'avons pas l'intention de modifier sa valeur au moment de l'exécution. L'allocation statique utilise la mémoire de pile, par exemple :
// 创建一个指向函数的指针 int (*func_ptr)(int) = [](int x) { return x * x; }; // 调用函数指针 int result = func_ptr(5);
Supposons que nous ayons une méthode nommée Shape
的类,该类有两个派生类:Circle
和 Square
。每个派生类都有一个 calcArea
pour calculer son aire. Nous pouvons calculer de manière générique l'aire de n'importe quelle forme en utilisant un argument de pointeur de fonction comme suit :
class Shape { public: virtual double calcArea() = 0; }; class Circle : public Shape { public: double calcArea() override { return 3.14; } }; class Square : public Shape { public: double calcArea() override { return 4.0; } }; // 函数指针参数表示计算形状面积的函数 double calcArea(Shape *shape, double (*func_ptr)(Shape*)) { return func_ptr(shape); } int main() { Circle circle; Square square; // 通过函数指针动态地计算面积 double circleArea = calcArea(&circle, [](Shape *shape) { return static_cast<Circle*>(shape)->calcArea(); }); double squareArea = calcArea(&square, [](Shape *shape) { return static_cast<Square*>(shape)->calcArea(); }); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!