2012-04-19 8 views
1
element* elements = new element[size.x]; 

これは、デフォルトのコンストラクタでX要素を構築します。私のプログラムの間に、私はこのように、異なるコンストラクタのパラメータで各要素を構築したいと思います:配列要素の既定の構成を防止する

for(int i=0; i < size.x; ++i) 
    elements[i] = element(i); 

いかなる方法防ぐためと不要なデフォルトのインスタンス化(私は実装しないこと)と、不必要カジェがあります〜Operator=

+1

'std :: vector 'を使うことができない理由はありますか?( 'push_back'や' emplace_back'を使って)これを行うでしょうか? – ildjarn

+0

理由はありません、それはちょうど好奇心の外です。なぜ私はベクター上でemplace_backでこれを行うことができますが、配列上の等価物ではないことを理解できません – lezebulon

+0

よく 'std :: vector <>'はそれを行うことができるので、明らかに可能です...; - ] – ildjarn

答えて

1

は、あなたがこの

を達成するために二重のポインタを使用することができます
element ** elements = new element * [size.x]; 

for(int i=0; i < size.x; ++i) 
    elements[i] = new element(i); 
0

これは本当に問題がある場合は、配列を使用しないでください。既定のコンストラクタにstd::vectorを使用します。

明示的なベクトル(const Allocator & = Allocator()); デフォルトコンストラクタ:空のベクトルを作成します。内容とサイズはゼロです。

0

あなたがはブレース初期化子で、通常はストレートインプレース建設にアウトに最適化されます -initialize自動配列を、コピーすることができます。しかし、動的配列のために動作しません

elements e[] = { elements(1,2,3), elements(), elements('a', true) }; 

。 C++ 11では、あなたは、初期化子リストを指定することができますが、それはあまりにもコピー初期設定ではなく、直接の初期化である:それはあなたのデザインを傷つけていない場合

elements * e = new elements[2] { elements(1,2,3), elements('a', true) }; 
関連する問題