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

时间:2014-02-13 16:15:51

标签: c++11 clang smart-pointers

示例,我有一个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_集合应该保留什么?或者他们应该继续作为老派的指针?老派指针仍然是一种引用物体的“现代”方式吗?

1 个答案:

答案 0 :(得分:0)

vector<unique_ptr<Car>> all_cars_;

听起来非常适合您的应用。拥有all_cars的人,也拥有Car*中的所有all_cars。这将优于:

vector<Car*> all_cars_;

至少有两个原因:

  1. 您不必再担心内存所有权代码了。
  2. 编译器会让您不小心让多个实体拥有all_cars_中的任何指针。
  3. 有关:

    vector<Car*> my_cars_;
    

    听起来这些是非拥有指针。所以将它们保持为Car*是完全合理的。这也允许您自由地复制任何这些指针。您唯一需要注意的是由于all_cars_中的更改导致指针无效,您肯定已经使用当前设计进行了管理。