Потому что, когда вы используете new
, вы (обычно) используете «новое выражение», которое выделяет и инициализирует объект. Затем вы назначаете адрес этого объекта указателю на объект того же (или родительского) типа, который не требует приведения. Нормальное новое выражение (т.е. не новое размещение) будет вызывать operator new
внутренне, но результатом нового выражения будет , а не только результат от operator new
.
Если вы вызываете operator new
напрямую, то вам нужно привести его результат, чтобы присвоить возвращаемое значение не пустому указателю, точно так же, как вы должны делать с возвращением из malloc
.