在 std 集合中使用新的智能指针



例如,我有一个 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_;

至少有两个原因:

  1. 您再也不用担心内存所有权代码了。
  2. 编译器将防止您意外地让多个实体拥有all_cars_中的任何指针。

为:

vector<Car*> my_cars_;

听起来这些是非拥有的指针。 因此,将它们保留为Car*是完全合理的。 这也允许您自由复制任何这些指针。 您唯一需要注意的是指针的失效 由于all_cars_的变化,您肯定已经在使用当前设计进行管理。

相关内容

  • 没有找到相关文章

最新更新