0

快速提问:

在说

#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.

?

如果我错了,有人可以纠正我吗?

4

3 回答 3

2

我认为你需要的是:

vector<Object*> arr;

这将是一个指针“数组”。(当您离开声明它的范围时,该数组将被自动销毁)。

当然,你可以vector<Object*>*,但它更类似于

Object*** arr = new Object**;
*arr = new Object*[100];
于 2012-11-04T16:59:27.873 回答
1

实际上,您正在寻找的“并行性”介于以下两个定义之间:

vector<Object*> arr;
Object** arr = new Object*[100];

这些是彼此“并行版本”的唯一方式是它们都提供某种指向Object. 从某种意义上说,它们都是指向指针的“数组”,Object您可以xarr[0]->x使用两者一样访问对象的成员。但是,两者都不是真正的 type array of pointer to Object

特别是,使您的第一个定义与第二个定义不同的是您有一个指向vector. 在这种情况下,您将访问成员xlike (*arr)[0]->x,必须首先取消引用指针。

但是,这两个定义arr在很多方面彼此非常不同,所以我永远不会认为它们是相似的。第一个是更惯用的 C++,因为向量会为您整理指针的分配和释放。对于第二个,您需要记住delete[]稍后再打电话。还为您提供vector了一个动态大小的容器和许多其他很棒的特性,这些特性是vector.

然而,就编写干净和惯用的 C++ 而言,两者都不是最佳选择。无论您做出哪种选择,您仍然必须分配(使用)您要存储指针new的实际s,然后记住它们。您最好的选择是只使用. 如果出于某种原因,您确实需要存储指向对象的指针,那么最好使用某种智能指针,例如 in . 如果您的容器将具有固定大小(如示例中大小为 100 的数组),那么您可能更喜欢使用.Objectdeletevector<Object> arrvector<shared_ptr<Object>> arrarray<Object, 100>

于 2012-11-04T17:01:58.800 回答
1

这之间有更多的相似之处

#include <vector>

vector<Object*> arr(100);

和这个

Object** arr = new Object*[100];

为什么人们总是觉得需要更新一切?我认为因为它很复杂,所以它一定很好,对吧?其实错了。

于 2012-11-04T16:59:48.403 回答