C ++类 - 指针问题

时间:2009-11-16 02:44:56

标签: c++ pointers class compiler-construction

我在学校进行了一次测验,有一个问题,我不确定我是否正确回答。我在书中找不到答案所以我只是想问你。

Point* array[10];

调用上面的代码时会创建多少个Point类实例?

我没有回答任何问题,因为它只为10个实例创建了空间,但没有创建任何实例。然后我的朋友说这只是一个因为当编译器看到Point *时它只是创建一个实例作为基础。

4 个答案:

答案 0 :(得分:14)

它不会创建Point

它的作用是创建一个包含十个指针的数组,这些指针可以指向Point个对象(它不会为十个实例创建空间)。但是,数组中的指针是未初始化的,并且实际上没有创建Point个对象。

答案 1 :(得分:4)

你几乎是正确的。

代码不会创建Point的实例。但它确实创建了10个Point *个实例。它Point实例创建空间;例如,使用对new的调用来完成。

答案 2 :(得分:2)

Point* array[10]创建一个包含十个指针槽的数组,编号为0..9。

你错了 - 除非

,否则在C ++中没有初始化发生这样的声明
  1. 您正在运行一个特殊的内存分配器,它会将内存归零,例如SmartHeap(或C ++ / CLI)或
  2. 如果数组在函数之外(例如:仅在.cpp文件中作为全局),在这种情况下所有指针都归零。
  3. 绝对没有创建实例。

    恭敬地反对strager的观点,没有Point *的实例这样的东西,想到存在这样的事情会很危险。指针和编译时检查只有空间,以确保只能将该类型的指针或指向子类的指针分配给该指针。

答案 3 :(得分:1)

  

没有使用这样的语句在C ++中进行初始化

如果Point*是全局的,array中的array个对象将被初始化为零。