C ++:为什么在有指针时需要引用?

时间:2012-05-28 08:38:03

标签: c++ pointers reference

  

可能重复:
  C++: When to use References vs. Pointers
  Could operator overloading have worked without references?

我无能为力,但这个基本问题在我的脑海里浮现:为什么C ++在你能用指针做的时候也有参考?

我知道在某些情况下,他们 稍微安全一些,而且往往使代码更漂亮,但从技术上讲,没有区别,对吧?那么有什么情况下我不能用指针做一个参考是必须的吗? 我希望看到具体的示例,说明何时使用引用是不可避免的。

声明:
我没有在StackOverflow上找到任何答案,这是关于语法差异的问题。我想知道为什么C ++语言首先引入了引用。

5 个答案:

答案 0 :(得分:8)

  • 单独使用指针,您无法正确pass-by-referencereturn-by-reference
  • 某些方法需要参考。你将如何实现一个拷贝构造函数?
  • 有时您需要强制执行别名。你不能用指针做到这一点 - 它们可以改变。引用不能绑定到不同的东西。因此,当您初始化引用时,您保证它将通过其范围引用相同的对象。
  • 安全问题
  • const)引用可以绑定到临时对象。要创建临时指针,您需要在传递给它的方法中释放它。但你无法判断它是暂时的还是不是内部的。

答案 1 :(得分:5)

运营商重载。使用“通过引用传递”的指针会给你不可接受的语法。

答案 2 :(得分:3)

如果您有一个指针作为参数,则必须检查它是否为NULL。 有了参考,你必须进行检查。 这就是为什么C ++中有人自己引用的引用 - http://www.stroustrup.com/bs_faq2.html#pointers-and-references

答案 3 :(得分:1)

class A{
public:
    A(int i){}
};

void foo(const A& a){};
void foo2(const A* pa){};
int main (void)
{
  foo(1);
  foo2(1); //invalid
  return (0);
}

我知道一个案例。用户不需要管理引用对象,编译器可以销毁它。 由于指针要求用户将其显式删除。对于foo2,很难管理临时生命周期。

答案 4 :(得分:0)

示例:

my_type *get_some_data();
...
my_type *data = get_some_data();

允许在

时执行delete data
my_type &get_some_data();
...
my_type &data = get_some_data();

无法删除。