内存来自于在没有new关键字的情况下初始化C++对象?

Geo*_*rge -7 c++

考虑代码段:

ClassName* p;
p = new ClassName;
Run Code Online (Sandbox Code Playgroud)

据我了解,我们正在从堆中分配内存到存储*p.

但现在考虑:

ClassName C;
Run Code Online (Sandbox Code Playgroud)

问题:如果不是从堆中,内存C来自哪里?

Chr*_*ckl 6

据我了解,我们正在从堆中分配内存到存储 *p.

更正确的措辞,创建的对象new具有动态存储持续时间.

如果不是从堆中,内存C来自哪里?

它具有自动存储持续时间.

请参阅C++标准§3.7/ 1.

谈论"堆栈"或"堆"会带您进入编译器实现级别.您通常不会对C++编译器如何使不同类型的存储持续时间起作用感兴趣,而只对它们的语义感兴趣.

  • @erip:嗯,SO问题和答案是全世界都看到的:) (2认同)