Java 面向对象和堆/堆栈

Java 面向对象和堆/堆栈,java,c++,oop,Java,C++,Oop,我有一节课看起来像这样 class A { int b; void B() { int c; } } int main() { A asdf; A fdsa = new A(); } A类的asdf和fdsa实例之间有什么区别?在这两种情况下,哪个进入堆栈,哪个进入堆 类A中的b变量是一个全局变量,无论类是如何声明的,都应该在堆中获得一个空间,对吗 函数B的副本也被分配到堆并从那里执行吗?asdf进入堆栈,而fdsa进入

我有一节课看起来像这样

class A
{
    int b;

    void B()
    {
        int c;
    } 
}


int main()
{
    A asdf;

    A fdsa = new A();
}
A类的asdf和fdsa实例之间有什么区别?在这两种情况下,哪个进入堆栈,哪个进入堆

类A中的b变量是一个全局变量,无论类是如何声明的,都应该在堆中获得一个空间,对吗


函数B的副本也被分配到堆并从那里执行吗?

asdf
进入堆栈,而
fdsa
进入堆。

asdf
进入堆栈,而
fdsa
进入堆。

假设
fsda
被声明为
a*
(即指针):

  • asdf.b
    位于堆栈上
  • fsda->b
    在堆上
  • 无论何时调用
    A::B()
    c
    都会进入堆栈

假设
fsda
声明为
a*
(即指针):

  • asdf.b
    位于堆栈上
  • fsda->b
    在堆上
  • 无论何时调用
    A::B()
    c
    都会进入堆栈

首先,fdsa应该是指针

A a_on_stack; // Destroys when going out of scope
A* a_on_heap = new A(); // Need to call "delete a_on_head;" to remove from memory

希望这有帮助

首先,fdsa应该是一个指针

A a_on_stack; // Destroys when going out of scope
A* a_on_heap = new A(); // Need to call "delete a_on_head;" to remove from memory
希望这有助于

< P> C++中内存中没有堆栈或堆的位置。它们是实现细节

A asdf;
它是一个自动分配和销毁的自动对象

A *fdsa = new A();
它是一个动态的、非自动的对象,分配和销毁应由您管理


标准中关于堆栈的唯一内容是“堆栈展开”:

为自动构造的对象调用析构函数的过程 在从try块到引发异常的点的路径上 称为“堆栈展开。[§15.2/3]

<>在C++标准中内存中没有堆栈或堆位置。它们是实现细节。

A asdf;
它是一个自动分配和销毁的自动对象

A *fdsa = new A();
它是一个动态的、非自动的对象,分配和销毁应由您管理


标准中关于堆栈的唯一内容是“堆栈展开”:

为自动构造的对象调用析构函数的过程 在从try块到引发异常的点的路径上 称为“堆栈展开。[§15.2/3]


你确信你的代码是用C++编译的吗?我相信它不会。什么是K+?看起来不是编程语言(或者请给出一个URL)。你是指C++吗?然后我声称你所发布的代码没有编译(因为指针和对象不一样),因为<代码>一个FDSA =新的A.();< /Code >无效(应该是代码> A*FDSA=新A.);)请花几个小时阅读一本关于C++编程的好书,什么意思K+不是编程语言?它是一种坚实的语言。它有大量的编译器和世界上数以百万计的用户。请给出一些关于“代码> K++<代码>的URL;我确实在C++上给出了一个,并且不能使用谷歌K+编程语言。关于K++、K、K、KAVA……(编辑:我的坏,卡瓦确实存在)你确信你的代码是用C++编译的吗?我相信它不会。什么是K+?看起来不是编程语言(或者请给出一个URL)。你是指C++吗?然后我声称你所发布的代码没有编译(因为指针和对象不一样),因为<代码>一个FDSA =新A。();无效(应为
A*fdsa=new A();
)请花几个小时阅读一本关于C++编程的好书,什么意思K+不是编程语言?它是一种坚实的语言。它有大量的编译器和世界上数以百万计的用户。请给出一些关于“代码> K++<代码>的URL;我确实在C++上给出了一个,并且不能使用谷歌K+编程语言。g关于K++,K#,卡瓦…(编辑:我的坏,卡瓦确实存在)另外,我认为fdsa应该是指针,因为它需要指向a类的实例。同时,我认为fdsa应该是指针,因为它需要指向a类的实例。它应该是
fdsa->b
not
fdsa.b
!它应该是
fdsa->b
not
fdsa.b