これは for ループで囲まれています。
v[i] = new (&vv[i]) vertex(pts[i],i);
vertexですstructptsですpoint*vですvertex**vvですvertex*
その部分は何をし(&vv[i])ますか?
配置が新しいようです。通常のnewステートメントと同じですが、実際にメモリを割り当てる代わりに、既に使用可能なメモリを使用します。これは、括弧内の式によってポイントされます。
あなたの場合、メモリを使用しvv[i]て新しいvertexオブジェクトを作成し、そのポインタ(つまり&vv[i])を返し、に割り当てられv[i]ます。
詳細については、このリファレンスなどを参照してください。
それが配置 new-expressionです。
既に割り当てられているメモリ (のアドレス) に新しいオブジェクトを構築していますvv[i]。
この割り当て関数を呼び出しています:
operator new(std::size_t, void*);
// ^^^^
// &vv[i] is passed here
これは単に 2 番目の引数を返します。vertexその型の引数の数に一致するコンストラクターが呼び出され、その場でオブジェクトを構築します。
これは、指定したメモリ位置にオブジェクトを配置できる新しい配置です。http://www.parashift.com/c++-faq/placement-new.htmlおよび「新しい配置」にはどのような用途がありますか? を参照してください。.