这是在C ++代码
中YInterface ** Y_list;
int numberofYInterfaces;
然后
numberofYInterfaces=1;
Y_list = new YInterface *[numberofYInterfaces]; //What ??????
我很难描绘Y_list的结构?然后想象一下,如果numberofYInterfaces变成多于一个,甚至是2?
,我会感到困惑OOPS 抱歉,我忘了写下面这句话:
Y_list[i]= new AnotherClass();
//以后添加到我的原始问题中。感谢Eric Fortin的单挑。 注意:AnotherClass继承自YInterface。
感谢任何帮助
答案 0 :(得分:12)
当您声明Y_list
时,您会得到一个带有未指定值的变量:
Y_list +-------+ | | +-------+
当您使用new[]
分配它时,它指向分配的任何new[]
,在这种情况下是一个指针数组:
Y_list array +-------+ +-------+ | o---+---->| | +-------+ +-------+ | | +-------+ | | +-------+ | | +-------+ | | +-------+
此时,您还没有任何YInterface
个对象。你只需要分配空间来保存指针,如果它们存在的话。
最后,为其中一个元素Y_list[i] = new AnotherClass
指定一个值。那是YInterface
后代存在的时候,但到目前为止只有一个。{1}}后代。在循环中运行该代码,您将获得多个实例。但是你仍然只有一个数组,并且有一个指向该数组的指针。
Y_list array AnotherClass +-------+ +-------+ +-------+ | o---+---->| o---+---->| | +-------+ +-------+ | | | | | | +-------+ | | | | | | +-------+ +-------+ | | +-------+ | | +-------+
要释放所有这一切,请记住每个delete
语句都有一个new
语句,每个delete[]
都有new[]
个语句:
delete Y_list[i];
delete[] Y_list;
答案 1 :(得分:2)
这意味着它是YInterface上动态分配的指针数组。然后假设方法blah是YInterface的一部分,你可以通过数组访问它,如:
Y_list[0]->blah();
关于你的编辑。数组中的每个项都是YInterface上的一个指针,所以为了实际指向某个东西,你需要分配它与new
运算符一样。所以做Y_list[i] = new AnotherClass()
确实会分配一个AnotherClass对象并在索引i的数组中存储一个指针。
请记住,虽然AnotherClass需要继承YInterface才能使其工作。
答案 2 :(得分:2)
Y_list指向一块内存,它是一个指向YInterface对象的指针数组 - 每个指针都是sizeof(YInterface *),所以这个内存块(在调用new之后)的大小为numberOfYInterfaces * sizeof(YInterface) *)。
所以Y_list只是一个普通的动态分配数组,带有numberOfYInterfaces元素,每个元素本身都是一个指向YInterface对象的指针。
答案 3 :(得分:0)
在c ++数组中是指针,也就是数组的第一个元素的内存地址是数组的名称,所以现在你拥有的是指针数组,因此**