2013-04-24 55 views
1

我對複製指派和指針有疑問。複製和指針

我將展示它作爲一個例子:

class Abc 
{  
public: 
    Abc() { q = new Qwe;} 
    Qwe* GetQwe() { return q; } 

private: 

    Qwe* q; 
}; 

Abc* a = new Abc(); 
Qwe* aux = a->GetQwe(); 
aux->Modify(); 

我不知道當我打電話GetQwe,它返回q的值的副本,但不是在同一個存儲位置爲q。

所以我的問題是,Abc的q會被修改嗎?

回答

4

所以我的問題是,Abc的q會被修改嗎?

沒有q本身將不會被修改,GetQwe()將返回指針仍然指向相同的存儲單元q的副本,但對象既qaux指向是一樣的,可以通過Modify()調用修改。在你調用成員函數之前,你需要初始化Abc::q

3

它返回指針的副本。該副本指向原始指針q指向的內存中的同一對象。所以,指針q不會被修改,但是pointee會。

1

GetQwe()將一個指針(地址)返回給Qwe對象。因此,您的指針aux指向與p相同的對象,因此對Modify的調用將更改該單個對象。要有一份副本,然後失去*像這樣:

Qwe GetQweCopy() { return *p; }