C++ 类 - 指针问题

问题描述 投票:0回答:4

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

Point* array[10];

调用上述代码时,创建了多少个 Point 类实例?

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

c++ class pointers
4个回答
14
投票

它不会创建

Point

它的作用是创建一个由十个指针组成的数组,这些指针可以指向

Point
对象(它不会为十个实例创建空间)。 不过,数组中的指针尚未初始化,并且实际上没有创建
Point
对象。


4
投票

你几乎是正确的。

该代码没有创建

Point
的实例。 不过,它确实创建了 10 个
Point *
实例。 它Point实例创建
空间
;例如,这是通过调用
new
来完成的。


2
投票

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

你们都错了——在 C++ 中,这样的语句不会进行初始化,除非

  1. 您正在运行一个特殊的内存分配器,它将内存归零,例如 SmartHeap(或 C++/CLI)或
  2. 如果数组位于函数外部(例如:仅在全局的 .cpp 文件内),在这种情况下所有指针都归零。

绝对不会创建任何实例。

谨不同意斯特拉格的观点,不存在 Point* 的“实例”这样的东西,并且认为存在这样的东西是危险的。只有指针和编译时检查的空间,以确保您只能将该类型的指针或指向子类的指针分配给该指针。


1
投票
在 C++ 中,这样的语句不会进行初始化

如果
Point*

是全局的,则

array
中的
array
对象初始化为零。
    

© www.soinside.com 2019 - 2024. All rights reserved.