私のリソース(かなり大きい)を扱うclass A
があります。今私はこれらのベクトルが必要ですstd::vector<A> vec_of_A (3, A(int N))
。問題は、vector
がまずテンポラリオブジェクトA(int N)
を作成し、その3回からコンストラクトをコピーして、その一時オブジェクトを破棄することです。私のA(int N)
はかなり大きなメモリを割り当てているので、私は実際に必要とするメモリ量よりも33%も多いメモリ要件で(一時的に)終了します。ベクターを構築するときに不要なコピーを取り除くにはどうすればいいですか?
vector
A
の作成方法不要なコンストラクタを避けていますか? (私のclass A
は5のすべてのルールを満たしています)。
EDIT:ごめんなさいデフォルト構成のオブジェクトA
の重要性を認識していませんでした。私の質問ではない既定のコンストラクタがパラメータ化されたコンストラクタについてです。
いつでもデータ構造にA *を格納することができます。 –
コードスニペットは意味ですか? 'A'引数をデフォルトで構築していますか? – StoryTeller
@PhilipBrackポインタを使用する特別な理由がない場合、それは意味がありません。値セマンティクスがOPのために機能する場合、(より多くの)動的な割り当てと間接化のためにオーバーヘッドの余分なレイヤーに物事を置くことはありません。結局のところ、指摘された「A」はまだ構築される必要があります。 –