C++ - 返回指针或常量引用

Posted

技术标签:

【中文标题】C++ - 返回指针或常量引用【英文标题】:C++ - return pointer or const reference [closed] 【发布时间】: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)“一种语言结构,有助于将数据与操作该数据的方法(或其他功能)捆绑在一起。” 【参考方案1】:

引用更健壮。你不能不小心调用 delete 。

【讨论】:

以上是关于C++ - 返回指针或常量引用的主要内容,如果未能解决你的问题,请参考以下文章

C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量

C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量

C++之引用操作

C++ 通过常量引用传递和通过常量引用返回

引用的实质

C++:从实例出发,搞定引用在不同场景的用法