OOP和堆/堆栈

时间:2013-10-26 07:00:25

标签: java c++ oop

我有一个看起来像这样的课程

class A
{
    int b;

    void B()
    {
        int c;
    } 
}


int main()
{
    A asdf;

    A fdsa = new A();
}

A类的asdf和fdsa实例有什么区别?在两种情况下都进入堆栈并进入堆?

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

还是将功能B的副本分配给堆并从那里执行吗?

4 个答案:

答案 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]