C++ - 这个双指针/数组结构到底意味着什么?我无法想象它

use*_*514 1 c++ arrays pointers data-structures

这是在C++代码中

YInterface ** Y_list;

int numberofYInterfaces;
Run Code Online (Sandbox Code Playgroud)

然后

numberofYInterfaces=1;

Y_list = new YInterface *[numberofYInterfaces];        //What ??????
Run Code Online (Sandbox Code Playgroud)

我很难描绘Y_list的结构?然后想象我的混淆当数字的YInterfaces变成多于一个,甚至是2?

OOPS抱歉,我忘记写下面的声明:

Y_list[i]= new AnotherClass();
Run Code Online (Sandbox Code Playgroud)

//以后我的原始问题.感谢Eric Fortin的单挑.注意:AnotherClass继承自YInterface.

任何帮助表示赞赏

Rob*_*edy 12

声明时Y_list,您会得到一个带有未指定值的变量:

Y_list
+-------+
|       |
+-------+

当你赋值时new[],它指向new[]分配的任何东西,在这种情况下是一个指针数组:

Y_list         array
+-------+     +-------+
|   o---+---->|       |
+-------+     +-------+
              |       |
              +-------+
              |       |
              +-------+
              |       |
              +-------+
              |       |
              +-------+

那时,你还没有任何YInterface对象.如果它们存在,你只需要分配空间来保存指向它们的指针.

最后,为其中一个元素赋值Y_list[i] = new AnotherClass.那是一个YInterface后代存在,但到目前为止你只有一个.在循环中运行该代码,您将获得多个实例.但是你仍然只有一个数组,并且有一个指向该数组的指针.

Y_list         array         AnotherClass
+-------+     +-------+     +-------+
|   o---+---->|   o---+---->|       |
+-------+     +-------+     |       |
              |       |     |       |
              +-------+     |       |
              |       |     |       |
              +-------+     +-------+
              |       |
              +-------+
              |       |
              +-------+

要释放所有这些,请记住delete每个new语句都有一个语句,每个语句delete[]一个new[]:

delete Y_list[i];

delete[] Y_list;
Run Code Online (Sandbox Code Playgroud)

  • @User,当你使用`new`时,`new`之后的东西就是你要分配的类型的名字.如果要分配该类型的数组,则类型后跟括号.这种情况下的类型是*指向YInterface*,或者是'YInterface*`.基类型名称和星号之间的空格对编译器无关紧要.如果我正在编写这段代码,我会编写`new YInterface*[...]`.没有`*[]`这样的东西.星号前面带有类型名称,而不是后面的括号. (2认同)