-1

ほんの数個の整数を含むオブジェクトのベクトルのベクトルがあります。

外側のベクトルは数百のベクトルを保持し、それらは数千から数十万のデータ オブジェクトを保持します。

私は多くのshared_ptrが関係するライブラリを使用しているので、それを使用します。

データがヒープに保存されるようにこれを保存するにはどうすればよいですか?

std::vector<std::shared_ptr<std::vector<Data>>>
std::vector<std::vector<std::shared_ptr<Data>>>

これを処理する正しい方法は何ですか?

4

2 に答える 2

2

newC ++またはcで使用するヒープに何かを格納するにはmalloc. ベクトルは動的にサイズ変更されるコンテナーであるため、ベクトルの実装ではヒープが使用されると思いますが。したがって、実際には、elemenet が既にヒープ上にある要素をベクターに追加すると、それがポインターでない限り、ポインターだけがヒープ上にあり、@Oswald が指摘するようにポインターが指す要素ではありません。

于 2013-03-29T18:35:32.627 に答える
2

データがヒープに保存されるようにこれを保存するにはどうすればよいですか?

参照セマンティクスが必要な場合、つまり、コンテナ内の値を、コードの他の部分からも参照される値のエイリアスにする必要がある場合、およびコードの一部で行われた変更は、変更されたオブジェクトへのエイリアス、Dataこれは正しいコンテナ定義だと思います:

std::vector<std::vector<std::shared_ptr<Data>>>

ストレージがどこから来るのかという質問については、s、s 、s のいずれであっても、その要素をストレージの連続領域にstd::vector 常に動的に割り当てます。shared_ptrvectorData

ただし、参照セマンティクスが本当に必要なのか、それともDataコンテナー内に型のオブジェクトを値によって格納するだけでは不十分なのかを検討することをお勧めします。

std::vector<std::vector<Data>>

shared_ptrこれにより、コードが簡素化され、メモリと実行時のオーバーヘッドも取り除かれます。

参照セマンティクスが必要かどうかは、アプリケーションの設計者であるあなただけが判断できます。あなたが提供した情報は、私が不確実性なしにそれを伝えるのに十分ではありませんが、うまくいけば、この回答が、あなたが自問すべき親切な質問と、それぞれの場合の答えについてのヒントになることを願っています.

于 2013-03-29T18:43:40.723 に答える