2014-02-13 32 views
0

例如,我有一個CarPool類,可以創建大量Car對象。它存儲在vector<Car*> all_cars_;在std集合中使用新的智能指針

Car類實際上是許多不同類型的汽車的基本類型(所以vector<Car>不會像我所理解的那樣工作)。

我有一些Person對象,可能有權訪問這些汽車中的一些。 Person類將它們存儲在vector<Car*> my_cars_;中。

CarPool對象將始終比Person對象長,因此負責所有權。正因爲如此,我一直在考慮將CarPool集合變爲vector<unique_ptr<Car>> all_cars_;

我應該更新Person類嗎?如果是這樣,all_cars_集合應該包含哪些內容?還是應該保持老派的指針?老派指針仍然是指代對象的「現代」方式嗎?

+2

嗯,我寧願只是'矢量'如果可能的話。 –

+0

@R。 Martinho Fernandes我同意,但我希望Car可能是各種不同派生類型汽車的基類,在這種情況下,需要通過指針訪問它們以避免切片。 – YoungJohn

+0

@R。實際上它是一種基本類型。但是,如果不是,我在CarPool類中做過Vector ,那麼您在Person類中會有什麼? – neiled

回答

0
vector<unique_ptr<Car>> all_cars_; 

聽起來非常適合您的應用。無論誰擁有all_cars,那麼還擁有all_cars中的所有Car*。這將優於:

vector<Car*> all_cars_; 

至少2個原因:

  1. 你將不必擔心內存所有權代碼的任何更長的時間。
  2. 編譯器將防止您意外地擁有多個實體擁有all_cars_中的任何指針。

爲:

vector<Car*> my_cars_; 

聽起來這些都是非所屬指針。所以保持它們爲Car*是完全合理的。這也可以讓你自由複製任何這些指針。唯一需要注意的是由於all_cars_中的更改導致指針失效,您肯定已使用當前設計進行管理。