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

これの間にはもっと類似点があります

#include <vector>

vector<Object*> arr(100);

この

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

なぜ人々は常にすべてを新しくする必要性を感じるのですか?複雑なのでいいと思いますよね?実際には間違っています。

于 2012-11-04T16:59:48.403 に答える
1

実際、探している「並列性」は、次の 2 つの定義の間にあります。

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

これらが互いに「並列バージョン」である唯一の方法は、両方が へのポインタのセットまたはリストのようなものを提供することObjectです。どちらもある意味ではポインタの「配列」であり、両方のようにオブジェクトObjectのメンバーにアクセスできます。ただし、どちらものタイプではありません。xarr[0]->xarray of pointer to Object

特に、最初の定義が 2 番目の定義と異なるのは、vector. その場合、 のxようなメンバーにアクセス(*arr)[0]->xし、最初にポインターを逆参照する必要があります。

ただし、これらの 2 つの定義はarr多くの点で互いに大きく異なるため、似ているとは決して考えません。1 つ目は、ベクトルがポインターの割り当てと割り当て解除を整理するため、より慣用的な C++ です。2 番目の場合は、後で電話することを忘れないでくださいdelete[]。はvectorまた、動的にサイズ変更されるコンテナと、vector.

ただし、クリーンで慣用的な C++ の記述に関する限り、どちらも最良の選択ではありません。どちらを選択しても、ポインターを格納newする実際Objectの を ( で) 割り当ててから記憶する必要がdeleteあります。ここでの最良の選択は、vector<Object> arr. なんらかの理由で、オブジェクトへのポインターを格納する必要がある場合は、vector<shared_ptr<Object>> arr. コンテナーのサイズが固定される場合 (例のサイズ 100 の配列など)、 を使用することをお勧めしますarray<Object, 100>

于 2012-11-04T17:01:58.800 に答える