4

これは for ループで囲まれています。

v[i] = new (&vv[i]) vertex(pts[i],i);
  • vertexですstruct
  • ptsですpoint*
  • vですvertex**
  • vvですvertex*

その部分は何をし(&vv[i])ますか?

4

4 に答える 4

9

配置が新しいようです。通常のnewステートメントと同じですが、実際にメモリを割り当てる代わりに、既に使用可能なメモリを使用します。これは、括弧内の式によってポイントされます。

あなたの場合、メモリを使用しvv[i]て新しいvertexオブジェクトを作成し、そのポインタ(つまり&vv[i])を返し、に割り当てられv[i]ます。

詳細については、このリファレンスなどを参照してください。

于 2013-08-30T11:18:08.213 に答える
2

それが配置 new-expressionです。

既に割り当てられているメモリ (のアドレス) に新しいオブジェクトを構築していますvv[i]

この割り当て関数を呼び出しています:

operator new(std::size_t, void*); 
//                        ^^^^
//                        &vv[i] is passed here

これは単に 2 番目の引数を返します。vertexその型の引数の数に一致するコンストラクターが呼び出され、その場でオブジェクトを構築します。

于 2013-08-30T11:18:27.357 に答える
0

これは、指定したメモリ位置にオブジェクトを配置できる新しい配置です。http://www.parashift.com/c++-faq/placement-new.htmlおよび「新しい配置」にはどのような用途がありますか? を参照してください。.

于 2013-08-30T11:19:50.103 に答える