C++有效的函数指针为null

C++ Valid function pointer is null

本文关键字:null 指针 函数 有效 C++      更新时间:2023-10-16

我基本上有一个类,它在构造函数中使用函数指针,然后将其存储在一个变量中,以便在类上调用函数时使用,如下所示:

class foo{
  public:
    foo( void(*a)() = 0 ): func(a){}
    void call(){ if(func) func(); }
  private:
    void(*func)(); };

当我创建一个具有已在包含的标头中正向声明的函数的实例时,就会出现问题。通过调试,我发现指针func有时为null,而传递的函数是有效的,导致它无法执行。

我正在将CodeBlocks与MinGW一起使用。

就像这样:

函数.h

void test();

函数.cpp

#include "function.h"
void test(){
  std::cout << "Hello World" << std::endl;}

main.cpp

#include "function.h"
int main(){
  foo a(test);
  a.call();
  return 0;}

还有一件事:它并不总是错误地发生,所以我认为这与优化或类似的事情有关。

我遗漏了一些事情,因为它们不重要,因为foo实例是用new创建的,添加到std::vector中,并在call()函数结束时删除自己。析构函数确保它也从std::向量中删除。这一切都发生在另一个cpp文件中,该文件还包括函数.h

已解决

从类的外观来看,似乎永远不想用null函数指针构造"foo"。如果函数指针为null,您是否考虑过在构造函数中引发异常?这样做可以帮助您确定代码中使用空指针构造"foo"的位置。