我不认为这是选角,但它是什么?
I don't think this is casting, but what is it?
这包含在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
的构造函数来就地构造对象。
是的,这是一个新的位置,它分隔了新对象所在的地址。如果你的(&vvv[i])等于0xabcdef00,你的新对象将位于0xabcdef00,更详细地说,你可以查看c++标准5.3.4。
这是一个新的放置,允许将对象放置在指定的内存位置。看见http://www.parashift.com/c++-faq/placement-new.html和"有什么用";放置新的";?。
相关文章:
- 使用大括号实例化 - 它是什么,为什么在这里使用它?
- 当我打印字符串时,我不知道它是什么输出
- 它是什么SOMTEMPLATE_VR_API
- 外部"C":什么需要它,什么不需要它?
- 测试使用visual studio编写的C++android应用程序的最佳方法是什么.不升级到windows专业版
- wxDataViewModel:它是什么以及如何使用它
- typedef void (*MyCallback) : 它是什么以及如何使用它
- C ++技巧与*和它是什么意思
- 它是什么?C++宏函数?如何替换这个宏?我能举个例子吗
- 由向量中的负索引引起的杂散 '342' 或它是什么
- 我在运行时遇到以下错误.它是什么意思?我该如何调试它
- 视觉错误类 c++ 类。 不知道它是什么
- 为什么地址运算符是C++类的默认成员,它是什么
- 我不认为这是选角,但它是什么?
- 函数声明中带有[]运算符的指针——它是什么意思
- 警告C4309 -它是什么意思,在这种情况下可以忽略它
- CL错误与MS Visual Studio 2010,它是什么
- in(std::cin):它是什么意思
- 我没有找到solus linux,它是什么,我怎么得到它
- 如何为delete编写一个C包装器,既快速又释放给定的任何类型,而不告诉它是什么类型