-5

ベクトルが含まれているオブジェクトのデストラクタを呼び出していることを確信していたので、メインのベクトルで clear() を使用した後、ベクトルを再利用しましたが、格納されているベクトルの値はクリアされませんでした...

編集 - コード:

vector<vector<int> > flush1;
flush1.reserve(4);
for(int i = 0; i != 4; ++i) flush1[i].reserve(7);
flush1.clear();
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
cout the size from flush1[0-3];
flush1.clear();

そしてまた

flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);

そして、flush1[0-3] からサイズを計算して、以前のサイズ + 新しいサイズを計算します (古いサイズと新しいサイズの加算)。

4

1 に答える 1

3

ベクトル オブジェクトには、予約済みストレージの開始、終了、および終了の 3 つのポインターがあります。

このclear()メソッドは、含まれている各オブジェクトでデストラクタを呼び出し、終了ポインタを先頭に設定します。

そのため、破棄されたオブジェクトのデータは、(たとえばデバッガーを使用して) 予約済みストレージで引き続き表示されます。

于 2012-09-21T11:45:04.867 に答える