[英]C++ function pointer to a member function - which address does it receive?
假设我有这门课:
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的void-returns 0-arguments函数成员。
首先我想问一下:
drawpntr = &Shape::draw;
该函数是一个成员函数,这里没有对象.. drawpntr接收什么地址? 这个班级甚至不应该存在
我同意这条线
(myShapeObject->*drawpntr)();
因为我明白我不能将函数指针解引用成员函数(没有对象 - >没有函数),但实际存储在drawpntr中的地址是什么? 这个时候没有任何对象
drawpntr = &Shape::draw;
line被调用..并且该类不应该作为实体存在
所有成员函数共享相同的代码,因此它们在内存的代码段中具有相同的地址。 成员函数仅在不同的实例上运行,因为它们隐式传递了this
指针的不同值。 它们不以任何方式与它们运行的任何实例相关联。 如果函数是非虚函数,则可以静态确定drawpntr
的实际值,如果函数是虚函数,则可以动态地(通过vtable )确定drawpntr
的实际值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.