【问题标题】:C++ function pointer to a member function - which address does it receive?指向成员函数的 C++ 函数指针 - 它接收哪个地址?
【发布时间】:2012-10-07 09:06:15
【问题描述】:

假设我有这个课程:

class Shape
{
public:
    int value;

    Shape(int v) : value(v) {};

    void draw()
    {
        cout << "Drawn the element with id: " << value << endl;
    }
};

以及以下代码(有效)

    Shape *myShapeObject = new Shape(22);

    void (Shape::*drawpntr)();
    drawpntr = &Shape::draw;

    (myShapeObject ->*drawpntr)();

我有一个 drawpntr 函数指针,指向 Shape 类的返回 0 参数的函数成员。

我想问的第一件事:

drawpntr = &Shape::draw;

该函数是一个成员函数,这里没有对象.. drawpntr 接收什么地址?这个类甚至不应该存在

我同意这条线

(myShapeObject->*drawpntr)();

因为我知道我无法取消引用指向成员函数(无对象 -> 无函数)的函数指针,但实际存储在 drawpntr 中的地址是什么?

drawpntr = &Shape::draw;

line 被调用.. 并且该类也不应该作为实体存在

【问题讨论】:

    标签: c++ function-pointers


    【解决方案1】:

    所有成员函数共享相同的代码,因此它们在内存的代码段中具有相同的地址。成员函数仅在不同的实例上运行,因为它们隐式传递了 this 指针的不同值。它们不以任何方式与它们操作的任何实例相关联。如果函数是非虚拟的,drawpntr 的实际值可以静态确定,如果函数是虚拟的,则可以动态(通过vtable)确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多