7

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 に格納されているため、コンテナー内に実際に格納されているオブジェクトをデバッガーで表示することは困難です)。
4

1 に答える 1

3

私がすることは、ネイティブ ヒープ配列をカプセル化することです。コピー可能性を必要とせずにサポートできるベクトルのインターフェイスのサブセットを定義できます。

于 2010-12-25T20:58:02.017 に答える