快速提问:
说的是
#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.
如果我错了,有人可以纠正我吗?
答案 0 :(得分:2)
我认为你需要的是:
vector<Object*> arr;
这将是指针的“数组”。 (当您离开声明它的范围时,该数组将自动销毁。)
当然,你可以拥有vector<Object*>*
,但它更类似于
Object*** arr = new Object**;
*arr = new Object*[100];
答案 1 :(得分:1)
这个
之间有更多相似之处#include <vector>
vector<Object*> arr(100);
和这个
Object** arr = new Object*[100];
为什么人们总是觉得需要新的东西?我认为因为它复杂,因此它必须是好的,对吗?实际上错了。
答案 2 :(得分:1)
实际上,您正在寻找的“并行性”介于以下两个定义之间:
vector<Object*> arr;
Object** arr = new Object*[100];
这些是彼此“并行版本”的唯一方式是它们都提供某种指向Object
的指针集或列表。从某种意义上说,它们都是Object
指针的“数组”,您可以同时访问x
这两个对象的成员arr[0]->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>
。