4

这包含在一个 for 循环中:

v[i] = new (&vv[i]) vertex(pts[i],i);
  • vertex是一个struct
  • pts是一个point*
  • v是一个vertex**
  • vv是一个vertex*

零件有什么(&vv[i])作用?

4

4 回答 4

9

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

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

有关更多详细信息,请参见此参考

于 2013-08-30T11:18:08.213 回答
2

那是放置 new-expression

它在已经分配的内存中构造一个新对象 - 在vv[i].

它正在调用这个分配函数

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

它只返回第二个参数。vertex然后调用其类型的参数数量匹配的构造函数来构造对象。

于 2013-08-30T11:18:27.357 回答
1

是的,这是一个新的放置,它指定了新对象所在的地址。如果您的 (&vv[i]) 等于 0xabcdef00,您的新对象将在 0xabcdef00 中,更多细节您可以查看 c++ 标准 5.3.4。

于 2013-08-30T11:55:31.203 回答
0

这是新的放置,允许将对象放置在指定的内存位置。请参阅http://www.parashift.com/c++-faq/placement-new.html“新放置”有什么用途?.

于 2013-08-30T11:19:50.103 回答