簡単な質問:
言っている
#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];
なぜ人々は常にすべてを新しくする必要性を感じるのですか?複雑なのでいいと思いますよね?実際には間違っています。
実際、探している「並列性」は、次の 2 つの定義の間にあります。
vector<Object*> arr;
Object** arr = new Object*[100];
これらが互いに「並列バージョン」である唯一の方法は、両方が へのポインタのセットまたはリストのようなものを提供することObject
です。どちらもある意味ではポインタの「配列」であり、両方のようにオブジェクトObject
のメンバーにアクセスできます。ただし、どちらも真のタイプではありません。x
arr[0]->x
array 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>
。