假设以下类声明:
class A { };
以下初始化有什么区别?
A * c = new A();
A c;
A()
答案 0 :(得分:2)
对于案例1,在堆上创建A
对象实例,而变量c
的位置取决于它是全局变量,成员变量还是局部变量。
[注:问题编辑,案例2完全不同]
对于案例2 没有对象被创建,因为它是一个函数声明。
对于案例2,c
的位置取决于声明它的 。如果它是一个全局变量,那么它将被放置在全局数据段中。如果它是一个参数或一个局部变量,它就放在堆栈上,如果它是一个成员变量,它放在包含对象的任何地方。
在案例3中,编译器在任何需要的地方创建临时变量,但很可能是堆栈。
重要的是要注意C规范实际上没有指定实际放置变量,规范只对变量的范围,生命周期和链接施加约束,如参数和本地变量仅在声明它们的函数(或嵌套块)中可用。