0

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

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

4

2 回答 2

3

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

Boost.Function 文档的Miscellaneous Notes 部分对此进行了更多讨论,但总结一下:

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

说了这么多,我已经广泛使用了 Boost.Function 并且从来没有遇到过它的存储或运行时成本在分析时实际出现的情况,所以这是否重要取决于您的实际使用情况。

于 2011-04-19T17:23:10.497 回答
0

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

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

这回答了你的问题了吗?

于 2011-04-19T19:26:05.833 回答