【发布时间】:2017-04-07 18:43:29
【问题描述】:
我有一个包含对象向量的容器。
class Container
{
vector<Foo> objects;
我想要
- 作为调用者对这些对象具有只读访问权限
- 避免调用复制构造函数
- 忽略容器超出范围后访问这些对象的问题(这永远不会发生)
基于此,getter 方法似乎有 2 种选择。要么返回对向量的 const 引用,要么返回指向 const 向量的指针
const vector<Foo> & getRef() { return objects; }
const vector<Foo> * getPtr() { return &objects; }
当然,如果我是调用者,我需要确保在迭代时不调用复制构造函数。所以我要这个
for (const Foo & f : getRef())
而不是
for (Foo f : getRef())
现在,我应该返回 const 引用吗?还是指向 const 的指针?有什么好处和坏处?
【问题讨论】:
-
当你返回的内容可以为空时,通常会使用指针,但在这种情况下,它是一个向量,所以它不能真的为空。我会使用 const-ref
-
您的第三个选择,恕我直言,总是更好,是将函数(调用 getter 并使用引用)带入容器 - 因此不需要 getter。请参阅封装:(来自 wiki)“一种语言结构,有助于将数据与操作该数据的方法(或其他功能)捆绑在一起。”
标签: c++ pointers constants return-value