成员函数指针 - 只有一个地址?

时间:2011-04-19 17:07:41

标签: c++ function-pointers functor member-function-pointers pointer-to-member

http://www.codeproject.com/KB/cpp/fastdelegate2.aspx

在上面文章的介绍的第二部分中,它说:“这是由于存储成员函数和进行成员函数调用的绑定对象所需的昂贵的堆内存分配。” ..我不懂这个?它是否必须复制并存储对象和成员函数?它不只存储成员函数的地址吗?

2 个答案:

答案 0 :(得分:3)

Boost.Function比原始函数指针更通用,更强大:它们可以存储任何可以使用特定签名调用的东西。但是,存储和运行时的成本与灵活性相关。

Boost.Function文档的Miscellaneous Notes section更多地讨论了这一点,但总结一下:

  • Boost.Function对象在内部存储成员函数指针和两个数据指针。
  • 如果存储大于特定大小的仿函数,则可能需要堆分配。
  • 调用Boost.Function对象会导致通过函数指针进行一次或两次调用,具体取决于存储的确切内容。

说了这么多,我已经广泛使用了Boost.Function,并且在分析时从未出现过存储或运行时成本实际出现的情况,因此这些是否重要将取决于您的实际使用情况

答案 1 :(得分:0)

,您无法仅使用指向该方法的指针调用成员函数。原因是因为方法是在上下文this)中调用的,该方法被调用的对象。如果您只有成员函数指针,则无法知道该方法应该应用于哪个对象。但是,如果成员函数是static,那么 NOT 具有上下文,因为可以在不实例化对象的情况下调用静态成员函数。

因此,要调用成员函数,您需要一个指向函数的指针, PLUS 一些对定义成员函数调用的上下文的对象的引用。

这会回答你的问题吗?