配列で動的オブジェクトの作成をするとき、引数付きのコンストラクタを呼び出す書き方がわかりません。というよりできないのでしょうか?
ちなみにただ単に配列を割り当てる場合
CXXX* test = new CXXX[10];
でできました。
また一方で引数付きのコンストラクタの呼び出し方は
CXXX* test = new CXXX(1);
でできました。
この2つを同時にやりたいのですができますか?できない場合何か代わるやり方はあるのでしょうか?ご教授願います
C++ の文法構成上、「配列をデフォルト以外初期化」する方法はありません。
デフォルト初期化であれば可能なので、たとえば
CXXX::CXXX(int x=1) { ... }
のようなデフォルト引数つきコンストラクタを用意すれば、配列の new の際には
当該引数つきコンストラクタが呼ばれます。
# が、それが目的の動作かどうかというとちょっとねー。
次善策としては、ポインタの配列を宣言し、その各要素に
引数つきのコンストラクタで得たポインタを入れてやることでしょうか。
もちろん、delete も要素数分必要となりますが。
どーしてもということなら new[] の代わりに malloc+placement-new で可能。
当然 delete[] の代わりに placement-delete+free となります。
個人的にはそこまでする必要を認めないので、デフォルトコンストラクタを用意し
デフォルトコンストラクト+代入で処理するのがめんどくさくないと思う。
色々と書き込みありがとうございます。
ジャノンさんの方法は、
CXXX** p = new CXXX*[10];
for文内で
p[i] = new CXXX(2);
みたいな感じでできました。
tetrapodさんのデフォルトコンストラクト+代入が一番手っ取り早いと思うんですが、ポインタの勉強にもなるためジャノンさんの方でやってみたいと思います。どちらも勉強になりました。ありがとうございます。
いやだから malloc+placement-new を試してみましょう。
ツイート | ![]() |