Я просто портирую какой-то старый код:
#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)
?
Любая помощь по декодированиюбудет оценена.