快速提问:
在说
#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];
实际上,您正在寻找的“并行性”介于以下两个定义之间:
vector<Object*> arr;
Object** arr = new Object*[100];
这些是彼此“并行版本”的唯一方式是它们都提供某种指向Object
. 从某种意义上说,它们都是指向指针的“数组”,Object
您可以x
像arr[0]->x
使用两者一样访问对象的成员。但是,两者都不是真正的 type array of pointer to Object
。
特别是,使您的第一个定义与第二个定义不同的是您有一个指向vector
. 在这种情况下,您将访问成员x
like (*arr)[0]->x
,必须首先取消引用指针。
但是,这两个定义arr
在很多方面彼此非常不同,所以我永远不会认为它们是相似的。第一个是更惯用的 C++,因为向量会为您整理指针的分配和释放。对于第二个,您需要记住delete[]
稍后再打电话。还为您提供vector
了一个动态大小的容器和许多其他很棒的特性,这些特性是vector
.
然而,就编写干净和惯用的 C++ 而言,两者都不是最佳选择。无论您做出哪种选择,您仍然必须分配(使用)您要存储指针new
的实际s,然后记住它们。您最好的选择是只使用. 如果出于某种原因,您确实需要存储指向对象的指针,那么最好使用某种智能指针,例如 in . 如果您的容器将具有固定大小(如示例中大小为 100 的数组),那么您可能更喜欢使用.Object
delete
vector<Object> arr
vector<shared_ptr<Object>> arr
array<Object, 100>
这之间有更多的相似之处
#include <vector>
vector<Object*> arr(100);
和这个
Object** arr = new Object*[100];
为什么人们总是觉得需要更新一切?我认为因为它很复杂,所以它一定很好,对吧?其实错了。