dポイントプレゼントキャンペーン実施中!

使用しているコンパイラおよびSTLはVisual Studio 2008 Professional付属のものです

C++にてSTLのコンテナにクラスオブジェクトを入れて使用しようと考えています

しかし、オブジェクトをコンテナへ挿入・削除した際に何度もコピーコンストラクタが呼び出されているのを確認しました

コンテナ内に直接、比較的大きめのリソースを持つオブジェクトを多数入れた場合、オブジェクトのコピーだけでパフォーマンスに影響が出るのではないか、と感じました
これはコンテナを使う上では許容しないといけないことなのでしょうか?

クラスオブジェクトを直接ではなく、ポインタで入れた場合は、コンテナ削除時にデストラクタが呼ばれないため、クラスポインタとコンテナの組み合わせはしてはいけないと認識しています

クラスとコンテナを組み合わせて使用する場合は、boostのshard_ptrを使用するのが、パフォーマンスを考慮する上では最も良い選択なのでしょうか?

それとも、それ以外の常識的な使用方法があるのでしょうか?

回答よろしくお願いします

A 回答 (3件)

コンテナということですので、shared_ptrよりはptr_containerではないでしょうか。


ptr_vectorとか。
    • good
    • 0
この回答へのお礼

コンテナ専用のポインタのラッパーがあったんですね
さながら、値コンテナを参照コンテナっぽく使うためのものでしょうか?

調べてみて、使ってみようと思います

お礼日時:2012/07/11 09:56

キホン値コンテナですからねー。


C++11なら push_back を emplace_back にとっかえれば
無駄なコピーが減りますけども。
    • good
    • 0
この回答へのお礼

値コンテナという呼び方があるのですか
JavaやC#のようなガベージコレクタありの言語で実装されているコンテナ(コレクション)は参照コンテナだったんですね

C++11での新しい情報に関して、ありがとうございます

お礼日時:2012/07/11 09:54

STL のコンテナは値ベースですから, はっきり言ってどうしようもないですね.



簡単に済ますなら shared_ptr がベストではないかと.
    • good
    • 0
この回答へのお礼

なるほど
回答ありがとうございます

お礼日時:2012/07/11 09:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!