論壇常見疑問:void func1(MYCLASS*& pBuildingElement); 為何同時出現 * 與 &?這代表什麼?何時使用?
MYCLASS 物件的指標。p 不影響呼叫端指標。*p = new MYCLASS;)。COM QueryInterface 即此模式。func1(p),無需 &p。MYCLASS*& 與 MYCLASS** 功能完全等價,只是語法糖:參考底層即指標,語法上表現為普通變數。
class CObList : public CObject {
public:
CObject*& GetAt(POSITION pos); // 可修改列表內指標
CObject* GetAt(POSITION pos) const; // 唯讀版本
};
CObject* p = list.GetAt(pos); → p = other; 僅修改區域變數 p,列表內指標不變。CObject*& rp = list.GetAt(pos); → rp = other; 直接替換列表內該位置的指標。兩個版本都允許修改物件本身(p->DoSomething()),但只有參考版本允許替換物件。
*& 即聯想 **:函數可能修改呼叫端指標。