对象内存空间分配与初始化

来源:互联网 发布:淘宝网乒乓球桌多少钱 编辑:程序博客网 时间:2024/06/05 02:13

在C++中,一个变量可以在某个程序范围内的任何地方定义,

所以在这个变量的定义之前是无法对它分配内存空间的。

通常,C++编译器可能像C编译器一样,在一个程序块的开头

就分配所有的内存。这些对我们来说是无关紧要的,因为作为

一个程序员,我们在变量定义之前总是无法得到存储空间的。

即使存储空间在块的一开始就被分配,构造函数也仍然要到对象

的定义时才会被调用,因为标识符只有到此时才有效。编译器甚

至会检查我们有没有把一个对象的定义放到一个条件块中,比如在switch块

中声明,或可能被goto跳过的地方。

下面程序,如果去除goto和case 2的注释,会产生编译时错误。

#include <iostream>using namespace std;class X {public:X() {}};void f(int i) {if(i < 10) {//goto jump1;}X x1;jump1:switch(i) {case 1:X x2;break;//case 2:X x3;break;}}int main() {return 0;}

在上面的代码中,goto和switch都可能跳过构造函数的调用点,

然而这个对象会在后面的程序块中起作用,这样,构造函数就

没有被调用,所以编译器给出了一条错误信息。这就确保了对

象在产生的同时被初始化。