我有一些存储矢量的类。而且我对它有所了解
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引用吗?
答案 0 :(得分:2)
您的方法会复制points
。对矢量本身的修改不会传播到类中的points
。您可以返回const
引用,以避免复制。如果他想要,呼叫者可以复制,但他可以控制。
请注意,返回矢量时生成的副本很浅。这意味着暴露了各个点:如果调用者对点进行修改(而不是对向量进行修改),这些修改将传播到类中向量所指向的点。
保护Point
的内容要困难得多 - 它需要您手动复制。它还需要您的来电者手动释放。但是,一般情况下,最好使用智能指针(std::unique_ptr
或std::shared_ptr
)以便更轻松地进行资源管理。
答案 1 :(得分:0)
它将复制原始矢量。
如果您不想这样做,请返回一个const引用。