可能重复:
C++: When to use References vs. Pointers
Could operator overloading have worked without references?
我无能为力,但这个基本问题在我的脑海里浮现:为什么C ++在你能用指针做的时候也有参考?
我知道在某些情况下,他们 稍微安全一些,而且往往使代码更漂亮,但从技术上讲,没有区别,对吧?那么有什么情况下我不能用指针做一个参考是必须的吗? 我希望看到具体的示例,说明何时使用引用是不可避免的。
声明:
我没有在StackOverflow上找到任何答案,这是不关于语法差异的问题。我想知道为什么C ++语言首先引入了引用。
答案 0 :(得分:8)
pass-by-reference
或return-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();
无法删除。