本当だろうか?検証してみた.
以下のコードは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 件のコメント:
コメントを投稿