2012-05-12 5 views
1

I有しメンバーのようないくつかのベクターを有する構造体:構造体の内部にC++サイズ

my_struct A; 

ベクター(複数可):

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

とmy_structのインスタンスを明らかに、このような

A.x.resize(...); 

または Axpushなどのステートメントで、プログラムの実行中に変更することができます_バック(...);

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

+4

このような場合に静的配列を使用していないのはなぜですか? – zch

+0

既存のコードはベクトルを使用しており、バイナリファイルに書き込むにはこの構造体が必要です。ベクトルを使用すると、他のベクトル(x = yなど)に直接割り当てることができます。 – MGA

+0

もちろん、私の問題の解決策がない場合は、最終的な回避策として常に静的な配列を使用できます。 – MGA

答えて

4

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

+0

ありがとうパット、私はzchが示唆したように、この場合は静的配列を使うほうが良いと思います。あまりエレガントではありませんが、すばやい回避策です。 – MGA