- ベストアンサー
クラス内の初期化の簡略方法と、クラス内の巨大な配列をどうにかしたい。
C++でクラスを書いているのですが、2つ悩んでいることがあります。 1つ目は、初期値のある巨大なテーブルをクラスの中に入れておくと、インスタンス生成ごとに巨大な参照用変数が作られるのはスマートでないと感じるのですが、何か良い方法はありますか? 2つめは、クラスで変数割り当てと同時に初期値セットを簡便に行いたいです。 class A { int info_table[100000]; void init(void){ info_table[0] = 1; // 1)実際は意味のある数値で、参照される巨大な変数 ... // 2)だらだら書くのではなくて、info_table[] = { 1, 2, 3 ... 100000};のように書きたい info_table[99999]; } public: A(){ init(); } ~A(){} };
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> インスタンス生成ごとに巨大な参照用変数が作られるのはスマートでないと感じるのですが、 値が変更されるのであれば仕方ないと思います。 できることといえば、配列を直接メンバにするのではなく、動的に割付けるようにするぐらいです。 > クラスで変数割り当てと同時に初期値セットを簡便に行いたいです。 非静的メンバであれば、直接解決する方法は基本的にはありません。 GCCのように、C99に対応したコンパイラであれば、C++でも複合リテラルが使えると思うので、 struct A { int a[10]; A() : a((int[10]){ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }) {} }; といった芸当もできます。 あるいは、いったん構造体にして、 struct A { struct B { int a[10]; } b; A() : b(ini) {} static const B ini; }; const A::B A::ini = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } }; のようにするかです。
その他の回答 (1)
- accper
- ベストアンサー率0% (0/1)
>インスタンス生成ごとに巨大な参照用変数が作られる これを避けたい場合、newで動的に配列を確保するとか、vectorクラスを使用するなど、配列サイズを可変にするのがいいと思います。