0

これを使用すると、これらのオブジェクトが整列されていると言っても安全だと思います。

std::vector<object_type> vect;

Bullet Physics でアロケータを見つけましたが、それらがどのように機能するのかわかりません。これにより、std::vector に関する疑問も生じます。

ここのデモでは、42 行目、http://code.google.com/p/bullet/source/browse/trunk/Demos/BasicDemo/BasicDemo.h#42

btAlignedObjectArray<btCollisionShape*> m_collisionShapes;

タイプはポインターであり、後でそれらのポインターに が割り当てられますnew。それは本当にアライメントを保証しますか? アロケーターがポインターを処理するように作成されている場合は、そうだと思いますが、アロケーターの知識がありません。その上、何が廃止されているかどうかもわかりません。

どうstd::vectorですか?宣言したら

std::vector<object_type*> vect;

後で割り当てますが、コンパイラは引き続きオブジェクトを整列させますか?

4

2 に答える 2

1

ポインターは、このポインターのベクトル内で連続して配置されます。これらのポインターが指すオブジェクトについては、何も言えません。それらはどこにでも配置できます。

印象的な例は

object_type on_stack;
vect[0] = new object_type;
vect[1] = & on_stack;
vect[2] = new object_type;

ベクトルの 1 番目と 3 番目の要素にはnew、ヒープ上でインスタンス化されたオブジェクトへのポインターが割り当てられ、2 番目の要素には、スタック上のさらに別のインスタンスのアドレスが割り当てられます。

ヒープ上でN 個のオブジェクトを「整列」したい場合は、まだnew object_type[N];

于 2013-02-11T00:49:20.947 に答える
-2

つまり、要素は連続してパックされますか?

はい、そうであることが保証されています。

于 2013-02-11T00:47:28.373 に答える