2011-08-05 62 views
1

讓我們陣列如何將對象作爲參考存儲在數組,列表或映射中?

class Bird{ 
public: 
int a; 
}; 

void fn(Bird& obj){ 
Bird& arrayList[5]; 
arrayList[0] = obj; 
arrayList[0].a = 10; 
} 

在這裏,在任何的ArrayList更新將不會反映在OBJ對象 我的要求是阻止複製的obj對象的一個​​例子。數組列表應該引用obj;

請不要使用指針數組伯德

+3

你需要解釋你爲什麼要這樣做(這個例子很愚蠢 - 爲什麼只有在訪問第一個元素時纔有數組)。由於參考只能被初始化,而沒有被賦值(賦值給被引用的對象,而不是參考),所以這可能不可能。 –

+1

指針正是爲此目的而設計的。當然,當使用原始指針(比如'Bird *')時,您的對象擁有策略必須確保對象(您保留指針)存在。如果你需要共享所有權,那麼你需要某種類型的智能指針(比如'boost :: shared_ptr ')。什麼是不使用指針的原因? –

回答

3

你不能有引用數組。

+0

但是你可以有一個指針數組。 –

+0

@Alexandre C .:我也想補充一點,但是OP不想使用指針數組,「請不要使用指向Bird的指針數組」,所以我對於建議的內容有點遺憾? :) –

+0

我的建議是使用指針數組。如果OP不想使用指針數組,那麼他將無法實現他想要的,期限。 –

0

建設你使用:

Bird& arrayList[5]; 

是不允許的。您應該存儲對象本身:

vector<Bird> Birds; 
Bird arrayList[5]; 

或指針

vector<Bird*> Birds; 
Bird* arrayList; 

這是唯一推薦的選項。

+0

那麼,爲什麼*不參考工作? (試圖刷新一個稍微更徹底的答覆或鏈接。) – 2011-08-05 06:20:00

+0

@pst:我認爲FredOverflow的答案將清除你的問題 –

2

C++標準對此很清楚(見8.3.2和8.3.4)。簡而言之,數組是對象的序列。參考是而不是的一個對象。因此,你不能有一個引用數組。

(出於同樣的原因,也有來引用或指針引用不引用:引用是對象別名和指針指向對象,但引用對象本身。)

相關問題