这包含在for循环中:
v[i] = new (&vv[i]) vertex(pts[i],i);
vertex
是struct
pts
是point*
v
是vertex**
vv
是vertex*
(&vv[i])
部分做了什么?
答案 0 :(得分:9)
看起来像是新的。它与普通的new
语句相同,但它不是实际分配内存,而是使用已经可用的内存,括号内的表达式指向该内存。
在你的情况下,它使用vv[i]
中的内存来创建新的vertex
对象,然后返回指向该对象的指针(即&vv[i]
)并将其分配给v[i]
参见例如this reference了解更多详情。
答案 1 :(得分:2)
它正在已经分配的内存中构建一个新对象 - 地址为vv[i]
。
它称之为allocation function:
operator new(std::size_t, void*);
// ^^^^
// &vv[i] is passed here
只返回第二个参数。然后调用vertex
的构造函数来匹配其类型的参数数量,以构建对象。
答案 2 :(得分:1)
是的,它是一个新的展示位置,它会分隔新对象所在的地址。如果你的(& vv [i])等于0xabcdef00,你的新对象将在0xabcdef00中,你可以检查c ++标准5.3.4。
答案 3 :(得分:0)
这是一个新的放置,允许将对象放在指定的内存位置。请参阅http://www.parashift.com/c++-faq/placement-new.html和What uses are there for "placement new"?。