c 11成员函数从unique_ptr的向量返回原始指针的向量

前端之家收集整理的这篇文章主要介绍了c 11成员函数从unique_ptr的向量返回原始指针的向量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开始使用c 11功能,我喜欢使用智能指针来拥有对象.这是我的课:
class MyClass {
  public:
    vector<MyObject*> get_objs() const;

  private:
    vector<unique_ptr<MyObject>> m_objs;
};

语义是MyClass拥有通过make_unique()创建的一系列MyObject. get_objs()返回一个原始指针的向量,以便各种调用者更新对象.因为这些调用者没有拥有对象,所以函数不返回向量< unique_ptr&gt ;. 但这意味着我需要实现get_objs():

vector<MyObjects*> MyClass::get_objs() const
{
  vector<MyObjects*> ret;
  for (auto obj : my_objs) {
    ret.push_back(obj->get());
  }
  return ret;
}

我的关注是get_objs()被相当频繁地调用,每次有一个开销来构造这个原始指针向量.

有什么我可以在这里做的吗?如果没有c 11技巧来节省开销,我应该使用类型向量< MyObject *>对于m_objs在第一位?

UPDATE 1

Jonathan Wakely的解决方案使用operator []改进了我的,以便调用者可以直接访问各个对象.

还有其他解决方案吗?我不介意去调用get_objs()的所有地方,但是想看看是否有更好的解决方案.

另一个注意事项 – 我不能使用BOOST,只是一些限制我必须住.

解决方法

class MyClass {
  public:
   std::vector<std::unique_ptr<MyObject>> const& get_objs() const {
     return m_objs;
   }

  private:
    std::vector<std::unique_ptr<MyObject>> m_objs;
};

一个const std :: unique_ptr< MyObject>&不能窃取所有权,并且与std :: unique_ptr< const MyObject>不一样.一个const std :: vector< std :: unique_ptr< MyObject>&只能对其数据进行常量访问.

猜你在找的C&C++相关文章