例如,我有一个 CarPool 类,它创建了很多 Car 对象。它将它们存储在vector<Car*> all_cars_;
Car
类实际上是许多不同类型汽车的基本类型(因此vector<Car>
按照我的理解,它不起作用)。
我有一些Person
对象可以使用其中一些汽车。Person
类将它们存储在vector<Car*> my_cars_;
中。
CarPool 对象的生存期始终高于 Person 对象,因此负责所有权。正因为如此,我一直在考虑将拼车系列变成vector<unique_ptr<Car>> all_cars_;
我应该更新Person
类吗?如果是这样,all_cars_
收藏应该包含什么?还是应该保留老派指针?老派指针仍然是指代对象的"现代"方式吗?
vector<unique_ptr<Car>> all_cars_;
听起来非常适合您的应用。 谁拥有all_cars
,那么谁也拥有all_cars
的所有Car*
。 这将优于:
vector<Car*> all_cars_;
至少有两个原因:
- 您再也不用担心内存所有权代码了。
- 编译器将防止您意外地让多个实体拥有
all_cars_
中的任何指针。
为:
vector<Car*> my_cars_;
听起来这些是非拥有的指针。 因此,将它们保留为Car*
是完全合理的。 这也允许您自由复制任何这些指针。 您唯一需要注意的是指针的失效 由于all_cars_
的变化,您肯定已经在使用当前设计进行管理。