2016-11-27 96 views
1

我是新的C++和我得到自己迷茫過,涉及的指針/引用如何修改使用對象* C++中

如果我有這樣的功能

void func(classA *&size) { 
    //this is the part I don't understand what to do 
} 

概念如果尺寸有寬度和長度,我將如何改變長度? (基本上使用* &修改一個對象)

+0

'if(!size)size = new classA;大小 - >長度= 1;'例如... – StoryTeller

+0

我建議一次學習一個概念。瞭解*指針*然後瞭解*引用*或反之亦然。 – Galik

回答

0

由於size是類型classA*的引用,它表現爲對一個指向classA對象的別名,並且可以與任何其他名稱,該對象可以互換使用。因此,應該修改指向的對象,像這樣:

size->length = 3; 

是一樣的,如果size宣佈型classA*而不是classA*&你會寫什麼。

+0

只顯示參考無關緊要的例子,相當混亂! – juanchopanza

0

您描述的函數將指針作爲參數引用。

這意味着函數打算修改指針本身。

此代碼已經聞起來很糟糕。它基本上共享指向對象的所有權,而不具有由智能指針(unique_ptr,shared_ptr)引用提供的保護,並且沒有用於指示該指針是觀察者的註釋(請參閱即將推出的文檔-standard observer_ptr)。

你想知道該函數內部要做什麼。這得看情況。參數設置爲將對象的地址傳遞給函數,並從函數接收(可能不同)對象的地址。

如果這是你想要的,你可能已經知道該怎麼做。

如果你只想傳遞一個對象的引用,只需傳遞一個引用。如果你想傳遞一個指向對象的指針,只需傳遞一個指針。

如果你確實想在一個指針傳遞和接收可能不同的指針,我建議函數應該看起來更像是這樣的:

classA* func(classA* a); // returns either a or another classA 

更妙的是可能是這樣的:

std::unique_ptr<classA> func(std::unique_ptr<classA> a); 

因爲現在intent和語義混凝土界面。呼叫者現在無法濫用該功能(禁止故意的自我傷害)。