我不认为这是选角,但它是什么?

I don't think this is casting, but what is it?

本文关键字:它是什么 不认为      更新时间:2023-10-16

这包含在for循环中:

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

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

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

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

如需更多详细信息,请参阅本参考资料。

这是放置新表达式。

它在已经分配的内存中构造一个新对象,地址为vv[i]

它调用这个分配函数:

operator new(std::size_t, void*); 
//                        ^^^^
//                        &vv[i] is passed here

其简单地返回第二个参数。然后调用与其类型的参数数量相匹配的vertex的构造函数来就地构造对象。

是的,这是一个新的位置,它分隔了新对象所在的地址。如果你的(&vvv[i])等于0xabcdef00,你的新对象将位于0xabcdef00,更详细地说,你可以查看c++标准5.3.4。

这是一个新的放置,允许将对象放置在指定的内存位置。看见http://www.parashift.com/c++-faq/placement-new.html和"有什么用";放置新的";?。