由于对象是通过隐藏函数构造的,而不是基本类型,因此它在C ++中为性能提供了完美意义的范围变量,而在C99中却没有。
我的问题是:存储在堆栈中的对象无论如何?
答案 0 :(得分:3)
在标准C ++中,没有堆栈这样的东西。该标准仅区分对象的不同生命周期。在这种情况下,声称为T t;
的变量被认为具有自动存储持续时间,这意味着它的生命周期以其周围范围的结束结束。大多数(所有?)编译器通过堆栈实现这一点。合理的假设是,以这种方式创建的所有对象实际上都存在于堆栈中。
答案 1 :(得分:2)
Automatically allocated [local]对象位于自动内存区域[" stack"],而dynamically allocated对象位于动态内存区域[" heap" ]。
根据经验:在C ++中,任何未使用new
或malloc
的内容都会自动分配。
编辑:请注意,我使用" stack"和"堆"由于标准[AFAIK]未指定在这些区域中如何管理数据,因此使用双引号,但[再次AFAIK],编译器确实倾向于使用堆栈用于动态区域的自动区域和堆。
答案 2 :(得分:0)
不知道你在第一句话中的意思,但是:是的,局部变量中的对象通常存储在堆栈中。