我只是在移植一些旧代码:
#define NewArrayOnHeap(TYPE, COUNT, HEAP, NEWPTR, ERROR) \
((*(NEWPTR) = new ( #TYPE "[" #COUNT "]", __alignof(TYPE), (HEAP), &hr, (ERROR)) TYPE[COUNT] ), hr)
看起来原来应该定义自己的神奇new
运算符。我很好奇这种用法。
示例用法
int main()
{
void* heap = /* Don't know how to define this */
double* ptr;
HRESULT hr;
hr = NewArrayOnHeap(double, 10, heap, ptr, "Help /* Just guessing here */");
}
当我g++ -E
用来获取预处理器输出时,它是:
int main()
{
double* ptr;
HRESULT hr;
hr = ((*(ptr) = new ( "double[ 10 ]", __alignof(double), (NULL), &hr, ("Help")) double[10] ), hr);
}
这看起来有点像placement new
.
但是现在这是一个重载的新调用(带有一些时髦的参数,一个五个参数的new
调用),还是这里的逗号是逗号运算符,因此它被简化为("Help")
(这没有意义)。
new
历史上(甚至现在)是否允许有两个以上的参数(size, hint)
?
任何有关解码的帮助将不胜感激。