C++getter临时与常量引用
C++ getter temporary vs const reference
我有一个存储向量的类。我有吸气剂
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_ptr
或std::shared_ptr
)来简化资源管理。
它将复制您的原始向量。
如果您不希望以这种方式返回const引用。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?