std::auto_ptr
などの STL コンテナーに格納することはできませんstd::vector
。ただし、ポリモーフィック オブジェクトのコレクションを返す必要がある場合があり、オブジェクトのベクトルを返すことができません (スライシングの問題が原因です)。それらを使用std::tr1::shared_ptr
して に貼り付けることができますvector
が、個別の参照カウントを維持するという高い代償を払わなければならず、実際のメモリ (コンテナー) を所有するオブジェクトは、オブジェクトを論理的に "所有" しなくなります。所有権に関係なく。
C++0x は、この問題に対する完璧なソリューションを の形で提供しますstd::vector<std::unique_ptr<t>>
が、私は C++0x にアクセスできません。
その他の注意事項:
- C++0x にはアクセスできませんが、TR1 は利用できます。
- Boostの利用は避けたい(他に選択肢がなければ利用可能だが)
boost::ptr_container
コンテナー (つまり)を認識してboost::ptr_vector
いますが、デバッガーが壊れるため、これを避けたいと思います (void *
内部は s に格納されているため、コンテナー内に実際に格納されているオブジェクトをデバッガーで表示することは困難です)。