次のようなC++コードのスニペットを見つけました。
// constructor that creates a 2D vector _store[nRow][nCol]
FlexiMatrix::FlexiMatrix(int nRow)
{
for (int i = 0; i < nRow; i++){
_store.push_back( vector<int>() );
_store[i].push_back( 0 );
}
}
そして_store
、次のように宣言されています。vector< vector<int> > _store;
ローカル変数とスタックの理解に違反しているようです。このコンストラクターを終了した瞬間に、ローカルで作成されたベクターのメモリーが存在しなくなるべきではありませんか?これはvector<int>.push_back()
、入力パラメーターとしてエイリアス参照を必要とするため、コピーコンストラクターが呼び出されることはなくpush_back()
、ローカル変数への実際の参照は何を受け取るのでしょうか。