2 つのループによって出力されるアドレスが同じであるとは思いませんか? 私はそうでしたが、なぜ(時々)それらが異なるのか理解できません。
#include <iostream>
#include <vector>
using namespace std;
struct S {
void print_address() {
cout << this << endl;
}
};
int main(int argc,char *argv[]) {
vector<S> v;
for (size_t i = 0; i < 10; i++) {
v.push_back( S() );
v.back().print_address();
}
cout << endl;
for (size_t i = 0; i < v.size(); i++) {
v[i].print_address();
}
return 0;
}
このコードを多くのローカル コンパイラとオンライン コンパイラでテストしたところ、次のような出力が得られました (最後の 3 つの図は常に同じです)。
0xaec010
0xaec031
0xaec012
0xaec013
0xaec034
0xaec035
0xaec036
0xaec037
0xaec018
0xaec019
0xaec010
0xaec011
0xaec012
0xaec013
0xaec014
0xaec015
0xaec016
0xaec017
0xaec018
0xaec019
最初のループで初期化を行ったために、プログラムの後続部分で初期化されていないオブジェクトを取得したため、これを発見しました。何か不足していますか?