これは for ループで囲まれています。
v[i] = new (&vv[i]) vertex(pts[i],i);
vertex
ですstruct
pts
です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および「新しい配置」にはどのような用途がありますか? を参照してください。.