当构造函数被调用时,我们将它推入堆栈,如果是,那么当它从那里弹出时?
答案 0 :(得分:1)
当调用构造函数(或其他函数)时,调用地址将被压入堆栈。当函数返回时,它会从堆栈中弹出。函数本身(构造函数或其他)不会被压入堆栈。
当然,这假设函数的代码没有内联生成 - 在这种情况下,没有调用也没有返回,并且可能根本没有堆栈使用。
答案 1 :(得分:1)
如果在堆栈上创建一个对象,当您退出该堆栈帧/范围时,它将被弹出/删除。
答案 2 :(得分:0)
一个构造函数被调用来构建一个类,无论它碰巧在哪里。如果你写的东西如下:
{
Foo f;
...
}
然后Foo有本地范围,将在堆栈上分配,然后在那里构建。如果你写的东西如下:
new Foo f;
然后Foo将在堆上分配,然后在那里构建。当执行线程离开封闭范围(大括号)时,第一个Foo将被破坏然后从堆栈中弹出。当您调用删除时,第二个Foo将被销毁并释放。