我有一个看起来像这样的课程
class A
{
int b;
void B()
{
int c;
}
}
int main()
{
A asdf;
A fdsa = new A();
}
A类的asdf和fdsa实例有什么区别?在两种情况下都进入堆栈并进入堆?
b类A中的变量是一个全局变量,无论如何声明类,都应该在堆中获得一个空格,对吗?
还是将功能B的副本分配给堆并从那里执行吗?
答案 0 :(得分:2)
asdf
进入堆时, fdsa
进入堆栈。
答案 1 :(得分:1)
假设fsda
被声明为A*
(即指针):
asdf.b
在堆栈中。fsda->b
在堆上。A::B()
时,c
都会进入筹码。答案 2 :(得分:1)
首先,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
希望这有帮助
答案 3 :(得分:1)
在C ++标准中,内存中没有堆栈或堆位置。它们是实施细节。
A asdf;
这是一个自动分配和销毁的自动对象。
A *fdsa = new A();
这是一个动态的非自动对象,分配和销毁应由你来管理。
标准中唯一关于堆栈的是“堆栈展开。”:
为构造的自动对象调用析构函数的过程 在从try块到抛出异常的路径上 被称为“堆栈展开。 [§15.2/ 3]