1

メンバーとしていくつかのベクトルを持つ構造体があります。

struct my_struct
{
    std::vector<int> x;
//  more members here
};

および my_struct のインスタンス:

my_struct A;

構造体内のベクトルは、プログラムの実行中に次のようなステートメントで明らかに変更できます。

A.x.resize(...);

または Axpush_back(...);

私の質問は、プログラム中のある時点で A のメモリ内のサイズを知る方法はありますか? ベクトル メンバーのため、 sizeof(A) は正しい答えを返しません。

4

1 に答える 1

4

ベクトルは、少なくともデフォルトのアロケータを使用して、ヒープ上のオブジェクトを保持するためにメモリを割り当てるため、ベクトルのサイズは構造体のサイズに影響しません。また、構造体の内容をファイルに書き込む場合、ベクターが保持するオブジェクトは決して書き込まれず、ベクターのデータ メンバーの値のみが書き込まれます。オブジェクトは、ある種のポインターのベクトルによって参照されるため、ファイルに書き込まれるのは、ポインターが指すデータではなく、ポインターの値 (アドレス) です。ベクターとそのオブジェクトをファイルに書き込むには、それを自分で実装する必要があります。おそらく、boost serialize がここで役立つかもしれません。

于 2012-05-12T13:21:06.147 に答える