おそらくただstd::vector<MyClass>
。あなたは
- ポリモーフィック クラスの操作または
- コピー コンストラクターを使用する余裕がない、またはコピーできない理由があり、このステップがコンパイラーによって書き出されないことを確信していますか?
もしそうなら、共有ポインタは行くべき道ですが、多くの場合、まったく利益がない場合にこのパラダイムを使用します。
変更を行う場合に完全にするためstd::vector<MyClass>
には、コードが後で多態性になる場合に行うべき醜いメンテナンスが必要になる場合がありますが、必要な変更は typedef を変更することだけです。
その時点で、std::vector全体をラップすることが理にかなっている場合があります。
class MyClassCollection {
private : std::vector<MyClass> collection;
public : MyClass& at(int idx);
//...
};
そのため、共有ポインターだけでなく、ベクター全体を安全に交換できます。トレードオフは、ベクトルを期待する API に入力するのが難しくなりますが、それらは、クラスに提供できるイテレータで動作する必要があるため、適切に設計されていません。
これはアプリにとっては負担が大きすぎる可能性があります (クライアントに面したライブラリで公開する場合は賢明ですが) が、これらは有効な考慮事項です。