В отличие от других операторов, где выражение, включающее этот оператор, эффективно отображается непосредственно на соответствующий вызов функции operator
, new-expression - это больше, чем просто один способ вызова operator new
функция. Цель new-expression - создать объект некоторого типа. Существует нечто большее, чем создание объекта какого-либо типа, чем просто решить, в какой части памяти этот объект должен жить. Например, могут потребоваться вызовы конструкторов. new-expression может использовать функцию выделения (то есть функцию operator new
) для выделения памяти. Но не каждый new-expression обязательно должен вызывать функцию выделения. В некоторых ситуациях компилятору разрешено пропускать вызовы функций распределения, например объединять несколько распределений в одно. Таким образом, в конце концов, компилятор решает, когда выделять память для чего. Он вызывает функцию operator new
для обработки фактического выделения памяти. И когда он это делает, он знает, сколько памяти запрашивать, основываясь на том, какие объекты будут созданы в этом хранилище. И этот размер запроса будет передан в качестве первого аргумента функции operator new
. Этот первый аргумент всегда присутствует, то, что вы пишете в скобках после new
в new-expression , будет просто передаваться в качестве аргументов в дополнение к неявному первому ...