堆栈上的构造函数

时间:2011-04-05 16:09:08

标签: c++

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果在堆栈上创建一个对象,当您退出该堆栈帧/范围时,它将被弹出/删除。

答案 2 :(得分:0)

一个构造函数被调用来构建一个类,无论它碰巧在哪里。如果你写的东西如下:

{ 
  Foo f;
  ...
}

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

new Foo f;

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

相关问题