多次元配列なスマートポインタ
最近、C++を勉強し始めたころに読んでた入門書をいまさらながら読みなおしていた。細かいことまで書いてある本なので意外と「こんなこと出来たのか」ということがちらほらあった。うむ、まだまだだな・・・。
で、そんな中に多次元配列の動的確保の話があった。
int(* a)[10] = new int[size][10]; a[0][9] = 10; delete[] a;
まあ正確に言うと、固定長配列の配列の動的確保・・・とでも言うのかな?なので動的に変えられるのは最初の次元だけです。頑張れば高い次元ももちろんできます。
double(* d)[3][1][4][1][5][9] = new double[c][3][1][4][1][5][9];
例によって最初の次元以外は固定です。まあ最初だけ動いて後ろが固定ということはわりとあるのでそれなりに使える文法だと思われます。
で、動的確保したのだから使い終わったらdeleteしなきゃいけないのだが、スマートポインタ側で管理出来ないかなと思ったらやっぱりちゃんと出来るんですね。
std::unique_ptr< int[][10] > a( new int[size][10] ); std::unique_ptr< double[][3][1][4][1][5][9] > d(new double[c][3][1][4][1][5][9]);
これは助かる。