c ++

时间:2015-06-03 12:27:41

标签: c++

假设以下类声明:

class A { };

以下初始化有什么区别?

  • A * c = new A();
  • A c;
  • A()

1 个答案:

答案 0 :(得分:2)

对于案例1,在堆上创建A对象实例,而变量c的位置取决于它是全局变量,成员变量还是局部变量。

[注:问题编辑,案例2完全不同]
对于案例2 没有对象被创建,因为它是一个函数声明。
对于案例2,c的位置取决于声明它的 。如果它是一个全局变量,那么它将被放置在全局数据段中。如果它是一个参数或一个局部变量,它就放在堆栈上,如果它是一个成员变量,它放在包含对象的任何地方。

在案例3中,编译器在任何需要的地方创建临时变量,但很可能是堆栈。

重要的是要注意C规范实际上没有指定实际放置变量,规范只对变量的范围,生命周期和链接施加约束,如参数和本地变量仅在声明它们的函数(或嵌套块)中可用。