[英]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.