示例,我有一个CarPool类,它创建了许多Car对象。它将它们存储在vector<Car*> all_cars_;
Car
类实际上是许多不同类型汽车的基本类型(因此vector<Car>
无法正常理解)。
我有一些Person
个对象,可以访问其中一些汽车。 Person
类将它们存储在vector<Car*> my_cars_;
。
CarPool对象将始终比Person对象更长,因此负责所有权。因此我考虑将CarPool集合变成vector<unique_ptr<Car>> all_cars_;
我应该更新Person
课程吗?如果是这样,all_cars_
集合应该保留什么?或者他们应该继续作为老派的指针?老派指针仍然是一种引用物体的“现代”方式吗?
答案 0 :(得分:0)
vector<unique_ptr<Car>> all_cars_;
听起来非常适合您的应用。拥有all_cars
的人,也拥有Car*
中的所有all_cars
。这将优于:
vector<Car*> all_cars_;
至少有两个原因:
all_cars_
中的任何指针。有关:
vector<Car*> my_cars_;
听起来这些是非拥有指针。所以将它们保持为Car*
是完全合理的。这也允许您自由地复制任何这些指针。您唯一需要注意的是由于all_cars_
中的更改导致指针无效,您肯定已经使用当前设计进行了管理。