[英]Pointer of pointers: std:vector vs. Array
快速提问:
在说
#include <vector>
vector<Object*>* arr = new vector<Object*>();
并行版本/相似/等
Object** arr = new Object*[100]; //I guess any size can do since vector maximum size changes all the time.
?
如果我错了,有人可以纠正我吗?
我认为您需要的是:
vector<Object*> arr;
这将是指针的“数组”。 (当您离开声明数组的范围时,该数组将被自动销毁)。
当然,您可以具有vector<Object*>*
,但它更类似于
Object*** arr = new Object**;
*arr = new Object*[100];
两者之间有更多相似之处
#include <vector>
vector<Object*> arr(100);
和这个
Object** arr = new Object*[100];
人们为什么总是需要更新所有内容? 我认为是因为它很复杂,因此必须很好,对吗? 其实错了。
确实,您要寻找的“并行性”介于以下两个定义之间:
vector<Object*> arr;
Object** arr = new Object*[100];
它们彼此为“并行版本”的唯一方式是它们都提供某种指向Object
的指针集或列表。 从某种意义上说,它们两者都是指向Object
的指针的“数组”,并且您可以同时使用arr[0]->x
这样的对象来访问Object
的成员x
。 然而,无论是真正类型的array of pointer to Object
。
特别是,使您的第一个定义与第二个定义不同的是,您有一个指向vector
的指针。 在这种情况下,这与访问部件x
等(*arr)[0]->x
,具有取消引用指针第一。
但是,这两个arr
定义在很多方面彼此都非常不同,因此我永远不会认为它们是相似的。 第一种是更惯用的C ++,因为向量将为您整理指针的分配和释放。 对于第二个,您将需要记住稍后要调用delete[]
。 vector
还为您提供了一个动态大小的容器以及作为vector
一部分的许多其他令人敬畏的功能。
但是,就编写干净且惯用的C ++而言,最好的选择也不是。 无论您做出哪种选择,您都仍然必须(使用new
)分配要存储指针的实际Object
,然后记住要delete
它们。 您最好的选择是只使用vector<Object> arr
。 如果由于某种原因确实需要存储指向对象的指针,那么最好使用某种智能指针,例如在vector<shared_ptr<Object>> arr
。 如果您的容器将具有固定的大小(如示例中大小为100的数组),则您可能更喜欢使用array<Object, 100>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.