这包含在一个 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]
.
有关更多详细信息,请参见此参考。
它在已经分配的内存中构造一个新对象 - 在vv[i]
.
它正在调用这个分配函数:
operator new(std::size_t, void*);
// ^^^^
// &vv[i] is passed here
它只返回第二个参数。vertex
然后调用其类型的参数数量匹配的构造函数来构造对象。
是的,这是一个新的放置,它指定了新对象所在的地址。如果您的 (&vv[i]) 等于 0xabcdef00,您的新对象将在 0xabcdef00 中,更多细节您可以查看 c++ 标准 5.3.4。
这是新的放置,允许将对象放置在指定的内存位置。请参阅http://www.parashift.com/c++-faq/placement-new.html和“新放置”有什么用途?.