C++ 取消引用函数指针以交换函数

C++ 取消引用函数指针以交换函数,c++,c,pointers,function-pointers,C++,C,Pointers,Function Pointers,我试图重新定义malloc(),以便在不修改代码的情况下使用自定义分配器。为什么下面的代码不起作用?使用#define是剩下的唯一解决方案吗 void *(*malloc_ptr)(size_t) = malloc; *malloc_ptr = my_malloc; 函数指示符没有赋值运算符 如果要将一个函数指针指定给另一个函数指针,则应编写 malloc_ptr = my_malloc; 函数指示符没有赋值运算符 如果要将一个函数指针指定给另一个函数指针,则应编写 malloc_ptr =

我试图重新定义
malloc()
,以便在不修改代码的情况下使用自定义分配器。为什么下面的代码不起作用?使用
#define
是剩下的唯一解决方案吗

void *(*malloc_ptr)(size_t) = malloc;
*malloc_ptr = my_malloc;

函数指示符没有赋值运算符

如果要将一个函数指针指定给另一个函数指针,则应编写

malloc_ptr = my_malloc;

函数指示符没有赋值运算符

如果要将一个函数指针指定给另一个函数指针,则应编写

malloc_ptr = my_malloc;

为了可靠地替换内存分配库,请使用并传递您自己的malloc和free实现


显然,您可以创建自己的名为
malloc\u ptr
的变量,并在所有函数中使用该变量,但请注意,其他库函数将调用标准
malloc

,为了可靠地替换内存分配库,请使用并将其传递给您自己的malloc和free实现



显然,您可以创建自己的名为
malloc\u ptr
的变量,并在所有函数中使用该变量,但请注意,其他库函数将调用标准
malloc

malloc
不是函数指针,而是函数。它可以分解成函数指针。@ C++:Hm.,为什么删除???????????C++是一个基于C的通用编程语言,使用这个标签来询问C++编译器编译的代码的问题,不管代码是否在C++、C语言、Objto-C和其他基于C的编程语言中都是有效的。还是两个都不一样?“分配器”这个词在C++上下文中是混淆的。我想它与C++分配器无关。<代码> MaloC < /C> >不是函数指针,它是函数。它可以分解成函数指针。@ C++:Hm.,为什么删除???????????C++是一个基于C的通用编程语言,使用这个标签来询问C++编译器编译的代码的问题,不管代码是否在C++、C语言、Objto-C和其他基于C的编程语言中都是有效的。还是两个都不一样?“分配器”这个词在C++上下文中是混淆的。我想它与C++分配器无关。运算符不是“为”任何东西。它们只是语言语法的一部分。你是说“赋值表达式”吗?@Kerrek SB为某个类定义赋值运算符怎么样?@Vladfrommoskow:定义事物与此无关。为所有类类型声明赋值运算符,因此可以使用类类型操作数形成赋值表达式。(当然,如果重载解析失败或所选重载被删除,它们可能仍然格式不正确。)@Kerrek SB你错了。并没有为中的所有实体定义赋值运算符,特别是函数指示符。运算符不是“用于”任何东西。它们只是语言语法的一部分。你是说“赋值表达式”吗?@Kerrek SB为某个类定义赋值运算符怎么样?@Vladfrommoskow:定义事物与此无关。为所有类类型声明赋值运算符,因此可以使用类类型操作数形成赋值表达式。(当然,如果重载解析失败或所选重载被删除,它们可能仍然格式不正确。)@Kerrek SB你错了。并没有为所有实体定义赋值运算符,特别是函数指示符。我对函数的解引用与任何其他基元类型一样。但情况似乎并非如此。如果我只是在自定义分配器的头文件中定义malloc,会有什么问题?而不是在编译过程中链接它。@xiver77:这取决于您的实现。如果您可以保证只从特定的编译单元调用
malloc
/
free
,那么这可能很好,而且
#define
会更容易。否则,您可能会出现崩溃和其他不希望出现的行为。我对函数的解引用与任何其他基元类型一样。但情况似乎并非如此。如果我只是在自定义分配器的头文件中定义malloc,会有什么问题?而不是在编译过程中链接它。@xiver77:这取决于您的实现。如果您可以保证只从特定的编译单元调用
malloc
/
free
,那么这可能很好,而且
#define
会更容易。否则,您可能会发生崩溃和其他不希望发生的行为。