对象 * X 和 C++ 中的 Object&X 有什么区别

what's the difference between object * x and object& x in c++

本文关键字:什么 Object 区别 中的 C++ 对象      更新时间:2023-10-16

可能重复:
C++中指针变量和引用变量的区别

假设我试图将对对象x的引用传递给c++函数。。。

有什么区别

pass(Object * x){

}

pass(Object& x){
}

以及当使用不同的方法声明指针/引用时,您将如何访问实际对象本身。。。

例如,如果我有Object*x,我将如何实际访问x 引用的实际对象

与Object&x

第一个是pass-by-pointer。第二个是引用传递。

至于用法,指针必须先"取消引用"才能使用。这是用*->操作符完成的:

void do_something(Object * x)
{
    Object & ref = *x; // * returns a reference
    ref.method();
    x->method(); // same as (*x).method()
}

参考文献没有这样的限制:

void do_something(Object & x)
{
    x.method();
}

然而,引用在其整个生命周期中只能指向单个对象,而指针可以更改目标,并且(如John在下面提到的(指向"无"(即NULL0,或者在C++0x中为nullptr(。在C++中没有NULL引用这样的东西。

由于引用更容易使用,也不容易出错,所以除非你知道自己在做什么,否则最好使用它们(指针是一个非常困难的主题(。

通过引用意味着调用方应保证引用的对象有效。传递指针通常需要函数来检查指针是否为NULL。

传递引用也意味着函数不关心对象的生命周期。传递指针可能需要函数来销毁对象。

因此,很明显,传递引用具有清晰的语义、较少的可能性和较少的错误倾向。