C ++ getter临时vs const引用

时间:2014-04-13 12:28:50

标签: c++

我有一些存储矢量的类。而且我对它有所了解

class Data{
  private:
    std::vector<Point*> points;

  public:
    inline std::vector<Point*> getPoints(){
      return points;
     }

}

当我调用getPoints()时它会返回临时对象吗?或者只是复制它?
或者我应该返回const引用,而不是?

更新

<小时/> 如果我有另一个持有我的数据的类,它也有一个getter:

class Controller{
private:
  Data *data;

public:
  inline std::vector<Point*> getPoints(){
     return data->getPoints();
  }
}

如果我不希望它们被复制,它们都应该是const引用吗?

2 个答案:

答案 0 :(得分:2)

您的方法会复制points。对矢量本身的修改不会传播到类中的points。您可以返回const引用,以避免复制。如果他想要,呼叫者可以复制,但他可以控制。

请注意,返回矢量时生成的副本很浅。这意味着暴露了各个点:如果调用者对点进行修改(而不是对向量进行修改),这些修改将传播到类中向量所指向的点。

保护Point的内容要困难得多 - 它需要您手动复制。它还需要您的来电者手动释放。但是,一般情况下,最好使用智能指针(std::unique_ptrstd::shared_ptr)以便更轻松地进行资源管理。

答案 1 :(得分:0)

它将复制原始矢量。

如果您不想这样做,请返回一个const引用。