Подтвердить что ты не робот

Перегрузочный оператор новый для класса

Когда мы перегружаем новый оператор класса, мы объявляем функцию как функцию-член. Например,

class OpNew {
public:
    OpNew() { cout << "OpNew::OpNew()" << endl;}
    void* operator new(size_t sz) {
         cout << "OpNew::new: "
            << sz << " bytes" << endl;
         return ::new char[sz];
    }
};

Как работает оператор OpNew *obj = new OpNew под капотом? поскольку перегруженный новый является членом класса OpNew, а не статичным. Итак, как компилятор обеспечивает выполнение этого вызова функции new member?

4b9b3361

Ответ 1

operator new() или operator new[]() для класса всегда является статическим членом класса, даже если он не объявлен с ключевым словом static.

Что говорит стандарт С++ (черновик n3242), в разделе [class.free]:

Любая функция распределения для класса T является статическим членом (даже если явно не объявлено static).