stxxl
FAQで、私はこれを見つけました:
STXXL コンテナーのパラメーター化
stxxl::vector のような STXXL コンテナ型は、POD である値型 (つまり、仮想関数、ユーザー定義のコピー代入/デストラクタなど) でのみパラメーター化でき、内部メモリへの参照 (ポインターを含む) を含みません。 . 通常、「複雑な」データ型はこの要件を満たしていません。
stxxl::vector<std::vector<T> >
これが、とstxxl::vector<stxxl::vector<T> >
が無効な理由です。必要に応じて、 を使用するstd::vector<stxxl::vector<T> >
か、インデックス計算を行って 2 次元配列をエミュレートします。
コンテナは、コンテナのサイズ変更時に含まれる要素のコンストラクタまたはデストラクタを呼び出さないため、使用できないことは完全にstxxl::vector<std::vector<T> >
理にかなっています。stxxl
しかし、次のような構造体を格納するにはどうすればよいでしょうか。
struct S {
int* a;
}
a
が指すオブジェクトがインスタンスが存在する限り有効であることを保証する場合、これをstxxl::vector<S>
に格納する際の問題は何ですか? の特定のインスタンスをディスクに移動する必要がある場合、ポインタの値がディスクに書き込まれます。後で、ポインター値が復元され、使用できるようになります。明らかに、ポインター値はマシン依存であり、インスタンス依存でもありますが、これは、ポイントされたオブジェクトの有効期間を処理しても問題でしょうか? シリアル化されたオブジェクトをソケット経由で送信していません。また、シリアル化されたオブジェクトを後で使用するためにデータベースに保存していません。struct
stxxl::vector<S>
S
a
何か不足していますか?
編集:誰かがポインティをコピーしないことを思い出させたので、後でstxxl
のインスタンスを取得すると、ガベージへのポインターを取得する可能性があります。struct S
そんなこと知ってる。ポインティがプログラムの存続期間全体にわたって有効であることを保証します。