私はいくつかの古いコードを移植しています:
#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
.
しかし、これはオーバーロードされた新しい呼び出し (いくつかのファンキーなパラメーター、5 つのパラメーターnew
呼び出し) ですか、それともここのコンマはコンマ演算子であり、したがって("Help")
(意味がありません) に縮小されます。
new
歴史的に (または現在でも) 3 つ以上のパラメーターを持つことが許可されていました(size, hint)
。
デコードに関するヘルプをいただければ幸いです。