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
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
notfdsa.b
!它应该是fdsa->b
notfdsa.b
!