Вызов int *a = new(__FILE__, __LINE__) int;
может вызвать функцию void* operator new(size_t , const char *, unsigned int );
,
Как это работает?
Каждый оператор в C ++ имеет определенный синтаксис и семантические требования, и они должны соблюдаться даже после перегрузки. Например. даже вы перегружаете каретку ^
оператор для представления power
, вы не можете ожидать, что он будет иметь более высокий приоритет, чем умножение *
, который будет иметь место в алгебре.
new
Оператор имеет синтаксическое требование следующим образом.
new (arguments ... /*for specialized case*/) Type (initializer list);
new (arguments ... /*for specialized case*/) Type [size_t];
Итак, чтобы иметь возможность использовать void* operator new ( std::size_t count, void* ptr );
нужно написать следующий код.
int main()
{
char arr[sizeof(int)];
int *a = new(arr) int;
}
В то время как void* operator new ( std::size_t count );
можно назвать без каких-либо глюков.
int main()
{
int *a = new int;
}
Таким образом, все аргументы, кроме первого (который он автоматически выводит из типа), должны быть помещены между new
а также type
и должен быть заключен в parenthesis
,
Итак, в вашем примере int *a = new(__FILE__, __LINE__) int;
Синтаксические правила новый, стремится operator new(std::size_t count, char const *, int)
Других решений пока нет …