2011-04-05 65 views
0

当构造函数被调用时,我们将它推到堆栈上,如果是,那么当它被弹出时?堆栈上的构造函数

+4

如果你想让这个问题得到解答,需要更具体的了解 – JaredPar 2011-04-05 16:12:26

+0

推送什么? – 2011-04-05 16:12:31

+0

构造函数只是函数 – 2011-04-05 16:12:45

回答

1

当调用构造函数(或其他函数)时,调用地址被压入堆栈。当函数返回时,它从堆栈弹出。函数本身(构造函数或其他)不会被压入堆栈。

这当然假设函数的代码没有内联生成 - 在这种情况下没有调用和不返回,并且可能根本没有堆栈使用。

1

如果您在堆栈上创建一个对象,当您退出该堆栈框架/作用域时,它将被弹出/删除。

0

无论碰巧碰到什么地方,构造函数都会调用构建一个类。如果你写这样的东西:

{ 
    Foo f; 
    ... 
} 

然后Foo有本地范围,将分配在堆栈上,然后在那里构建。如果你写的东西是这样的:

new Foo f; 

然后Foo将被分配在堆上,然后在那里构建。当执行线程离开封闭范围(花括号)时,第一个Foo将被销毁,然后从堆栈弹出。当你调用delete时,第二个Foo将被销毁并释放。

+0

'Foo f();'声明一个函数,而不是对象。改为尝试'Foo f;'。 – 2011-04-05 17:15:17

+0

是的。当我累了的时候,这会让我感到疲惫。谢谢。 – swestrup 2011-04-07 13:54:12

相关问题