2012-04-26 18 views
0

クラスAを持ち、型Aの配列を宣言すると、配列全体がデフォルトのコンストラクタでインスタンス化されたオブジェクトで満たされるような方法でC++が作成されるのはなぜですか?クラス?オブジェクトの配列の宣言:インスタンス化

+4

'std :: vector';を使用することをお勧めします); –

+0

質問を回すにはどうすればいいですか?オブジェクトの配列を宣言してもインスタンス化されなかった場合は、手動でインスタンス化する方法はありますか?新しいプレースメントを使用する必要がありますか?恐ろしく間違っているように思えるでしょうか?オブジェクトを使用する前にオブジェクトをインスタンス化する必要がある場合、自動的にそれを実行することが私にとって最良の解決策のように思えます。上で推奨されているように、必要に応じて実行したい場合は、静的配列ではなくベクトルのようなコンテナを使用します。 –

答えて

2

特定のサイズの配列を作成すると、配列の各要素が作成されるとすぐに有効でなければならないためです。

異なる動作が必要な場合はvectorpush_backを使用できます。ベクトルは空に作成されます。新しい要素を追加したい場合、push_backは任意の方法で作成されたオブジェクトを取り出し、ベクトルにそのコピーを作成します。

+0

また、['vector :: reserve'](http://www.cplusplus.com/reference/stl/vector/reserve/)を使って、何も構築せずに容量を予約することができます。 –

+0

もちろん、空のベクトルを作成する必要はありません。必要に応じて、最初のサイズをコンストラクタに渡すことができます。 –

関連する問題