我不认为这是铸造,但它是什么?

时间:2013-08-30 11:16:24

标签: c++ struct

这包含在for循环中:

v[i] = new (&vv[i]) vertex(pts[i],i);
  • vertexstruct
  • ptspoint*
  • vvertex**
  • vvvertex*

(&vv[i])部分做了什么?

4 个答案:

答案 0 :(得分:9)

看起来像是新的。它与普通的new语句相同,但它不是实际分配内存,而是使用已经可用的内存,括号内的表达式指向该内存。

在你的情况下,它使用vv[i]中的内存来创建新的vertex对象,然后返回指向该对象的指针(即&vv[i])并将其分配给v[i]

参见例如this reference了解更多详情。

答案 1 :(得分:2)

那是placement new-expression

它正在已经分配的内存中构建一个新对象 - 地址为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.htmlWhat uses are there for "placement new"?