本当だろうか?検証してみた.
以下のコードはvector参照メンバ v をクラスにセットして,vにデータを積み込む単純なコードである.データ積み込みの前と後で番地の値を取得し,かつsize()を呼んでいる.
結果はデータ積み込み前と後でアドレスは一緒,size()も無事動作した.
ちなみにg++は4.7.3, OSはFedora18. Visual Studioは2010, OSはWindows7 32bit.
#include <vector>
#include <iostream>
using namespace std;
class MyClass {
private:
vector<int>& v;
public:
MyClass(vector<int>& vParam) : v(vParam) {}
const vector<int>& GetV() { return v;}
void Init() {
for(int i = 0;i < 10;i++ ) {
v.push_back(i);
}
}
void Expand() {
for(int i = 0;i < 50000;i++ ) {
v.push_back(i);
}
}
int size() {
return v.size();
}
};
int main() {
vector<int> v;
v.resize(20);
MyClass m(v);
m.Init();
cout << &(m.GetV()) << m.size() << endl;
m.Expand();
cout << &(m.GetV()) << m.size() << endl;
}
結果
0x22ac5430 0x22ac5450030
0 件のコメント:
コメントを投稿