C++/Java引用变量

Chi*_*hin 2 c++ java variables pointers reference

在Java中,当我这样做

Foo bar = new Foo();
Run Code Online (Sandbox Code Playgroud)

bar将是一个包含新构造对象的地址的变量.我的教授称它为参考变量

上一行在C++中与此相当:

Foo *bar = new Foo();
Run Code Online (Sandbox Code Playgroud)

这里,bar是指向对象的指针

那么,Java中的引用变量基本上是指针吗?

另外,当我在C++中这样做时:

Foo bar;
Run Code Online (Sandbox Code Playgroud)

吧也是一个指针?如果没有,那么这是否意味着内存结构之间存在差异

Foo bar;
Run Code Online (Sandbox Code Playgroud)

Foo *bar = new Foo();
Run Code Online (Sandbox Code Playgroud)

Dir*_*ple 8

C++中的指针与Java中的引用类似.

但是,Foo bar;是非常不同的Foo *bar = new Foo();.第一个创建具有自动持续时间的Foo实例.它将在创建它的块的末尾被销毁.第二个创建动态分配的Foo实例.它将一直存在,直到它被明确删除.

如果希望在函数返回后存在对象,则不能使用第一个.如果在函数返回后使用指针或对它的引用,则会发生错误.在这种情况下,您必须使用第二种形式.

第一种形式的优点是您不必担心内存管理.它将在其范围的最后自动销毁.使用第二种形式,您必须手动删除它,或使用某种智能指针管理它.