C++getter临时与常量引用

C++ getter temporary vs const reference

本文关键字:常量 引用 C++getter      更新时间:2023-10-16

我有一个存储向量的类。我有吸气剂

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

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

更新


如果我有另一个类来保存我的Data,它也有一个getter:

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

如果我不想复制它们,它们是否都应该是常量引用?

您的方法生成points的副本。对向量本身的修改不会传播到类中的points。您可以返回const引用以避免复制。如果打电话的人愿意,他可以复制,但他可以控制。

请注意,返回向量时所做的复制是浅的。这意味着单独的点是公开的:如果调用者对点进行修改(而不是对向量进行修改),这些修改将传播到类中向量所指向的点。

保护Point的内容要困难得多——这需要手动复制。它还需要您的调用者进行手动释放。不过,通常情况下,最好使用智能指针(std::unique_ptrstd::shared_ptr)来简化资源管理。

它将复制您的原始向量。

如果您不希望以这种方式返回const引用。