私は、束のオブジェクトを作成し、ポインタを返すファクトリメソッドを持っています。オブジェクトの所有権が発信者に転送されます。ポインタのベクトル(と所有権)を返す方法C++ 11
std::vector<animal*> create_zoo();
これは機能しますが、メモリリークが発生しやすくなります。
auto zoo = create_zoo();
ベクトルがスタック上にあり、自動的にクリーンアップされますが、含まれているオブジェクトはありません。
さまざまなサブタイプのオブジェクトが返されます。ポインタの代わりに値を保持することはできません。
私は
std::vector<std::unique_ptr<animal> > create_zoo();
を使用するように考えていたが、コピー・セマンティクスをunique_ptr
持っていないと私は理論的には、コピーを作成し、値によってvector
を返します。
私は
std::unique_ptr<std::vector<std::unique_ptr<animal> > > create_zoo();
ことを避けるために、ヒープ上vector
を置くことができるが、これはばかげてきています。これは、あまりにも動作するはず
:
std::vector<std::shared_ptr<animal> > create_zoo();
をこれは動作しますが、それは本当に所有権を譲渡しません。呼び出し側は、オブジェクトへの他のポインタがあるかもしれないと仮定しなければなりません。
私は提案があります。 std::vector
である必要はありません。最近のC++でいくつかのオブジェクトの所有権を返すファクトリを実装する良い方法を探しています。私は今、ブーストを避けています。私は新しいC++ 11のものを探そうとしています。
また、動物オブジェクトをポインタとして割り当てる必要があるかどうかを再検討することもできます。 'std :: vector'もあなたの目的のために動くかもしれません。動物オブジェクトにはベクトルが割り当てられ、移動操作後に動物オブジェクトが移動します。 –