当对象在函数内部静态构造时,它是在堆上还是在堆栈上分配?

Eri*_*pir 1 c++ heap stack memory-management

如果我有以下代码:

for(...){A a; }

会在堆上还是在堆栈上分配?

小智 8

当你说:

for (...) { A a; }
Run Code Online (Sandbox Code Playgroud)

变量a不是静态构造的.那将是:

for (...) { static A a; }
Run Code Online (Sandbox Code Playgroud)

实际上在您的代码中,a是在堆栈上创建的自动对象.但是,这并不意味着没有动态分配.如果A看起来像这样:

struct A {
   A() { p = new char[100]; }
   char *p;
};
Run Code Online (Sandbox Code Playgroud)

然后当你说:

for (...) { A a; }
Run Code Online (Sandbox Code Playgroud)

ap的存储是在堆栈上创建的,但是ap指向的存储是动态创建的.