Как вызов new вызывает пользовательскую функцию распределения мест размещения?

Вызов int *a = new(__FILE__, __LINE__) int; может вызвать функцию void* operator new(size_t , const char *, unsigned int );,

Как это работает?

1

Решение

Каждый оператор в 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)

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector