2011-11-14 40 views
0

我現在正在學習C++,並且希望獲得關於存儲成員變量對象的一些建議。我想在A中存儲B的實例,那麼執行此操作的最佳方法是什麼?將對象作爲指針存儲在C++中的類中

[編輯] - 我做這個例子更真實的世界。我需要能夠在運行時構造和分配紋理並將其分配給遊戲對象。

class GameObject 
{ 
public: 
    Texture texture; 
}; 

.... 

GameObject gameObject; 
Texture texture; 

gameObject.texture = texture; 

class GameObject 
{ 
public: 
    Texture *texture; 
}; 

.... 

GameObject gameObject; 

gameObject.texture = new Texture; 

我儘量不使用指針,但在某些情況下,我覺得我需要。

+3

在第一個例子中,爲什麼分配?您已在A中擁有B的實例。 – neagoegab

+1

答案取決於所涉及的所有權和語義。存儲成員變量對象是你在第一種情況下做的事情,在第二種情況下,你保持指向其他地方的對象的指針。 –

回答

3

如果你想不同的對象使用指針來重新安裝(指不同class B對象)的成員變量。如果不只是使用一個對象。

是的,這是爲了避免指針是一個好主意,如果你需要使用他們喜歡的智能指針,而不是原始/裸指針。

+0

我更新了代碼,以更準確地反映我試圖實現的目標。我希望能夠在運行時創建紋理並將其分配給遊戲對象。 – Meroon

+0

@Meroon:你不能在構造函數中傳遞它的紋理? –

+0

我希望能夠交換紋理而不必創建新的遊戲對象。 – Meroon

0

這真的取決於您的特定解決方案和需求。兩種方式都很好,可以接受。沒有什麼「正確的方式」去做任何語言的大部分事情,因爲你的解決方案決定了應該怎麼做。

雖然有一點要記住的是,如果B是一個包含許多數據成員的大類,那麼如果不使用指針,它會增加A的大小。另外,如果您確實使用指針,則需要確保執行正確的分配和解除分配,並且不要相信用戶這樣做。

0

這裏是什麼,我認爲是很好的標準使用方法:

  1. 功能:是A和B部分或只與它?汽車有引擎,但驅動程序是外部的。另一種看待這個問題的方法是:他們從一開始就是一起還是被分配給A?

  2. 建設:爲B完全在所構建的時已知/可定義?

0

這取決於您是否想要A來控制B的內存。

在其他對象之間來回傳遞對象時,使用指針非常有用。當你決定不使用指針時,很重要的一點是要意識到一旦對象超出範圍,其成員變量也一樣。如果指向該對象成員的指針仍然存在於其他地方,則會導致問題。

如果這不會是在你的應用程序中的問題,我會避免使用指針。