C ++有效函数指针为null

时间:2014-11-07 21:46:18

标签: c++ function-pointers

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

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

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

我在MinGW上使用CodeBlock。

所以这样:

function.h

void test();

function.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 :: vector中删除。这一切都发生在另一个包含function.h的cpp文件中

解决

1 个答案:

答案 0 :(得分:1)

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