a + b
- это просто синтаксический сахар для a.operator+(b)
или operator+(a, b)
.
С другой стороны, new Foo(x, y, z)
- это НЕ просто синтаксический сахар для operator new(Foo, x, y, z)
или что-то в этом роде. Это намного сложнее:
void* address = operator new(sizeof(Foo)); // here is the behavior you can replace
try {
new(address) Foo(x, y, z);
} catch (...) {
operator delete(address);
}
Как видите, функция operator new
просто выделяет память, что составляет лишь половину того, что фактически делает оператор new
. На мой взгляд, было бы гораздо разумнее назвать эту вещь allocate_memory
или что-то в этом роде. Это определенно НЕ оператор, как operator+
.