Новая перегрузка оператора в c++

Я знаю, что в C++ мы можем перегружать оператор new и delete. Но у меня есть вопрос относительно того, как делается этот вызов перегруженного оператора new. Есть две вещи:

  1. если у меня есть статическая перегруженная новая, как это

    static void* operator new(size_t size)
    {
       std::cout << "new called";
       return nullptr;
    }
    

    я могу вызвать

    Test* t = new Test();
    

    потому что я понимаю, что мне не нужно создавать объект для вызова перегруженного нового. Я могу сначала вызвать новый оператор, а затем конструктор.

  2. Однако, если у меня это без статики, как показано ниже

    class Test{
        Test(){
            std::cout << "constructed";
        }
    
        void* operator new(size_t size){
            std::cout << "new called";
            return nullptr;
        }
    };
    

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

Первый вопрос: почему вы переопределяете new?

tadman 13.09.2018 20:45

Ничего особенного, я просто читал о пользовательских распределителях памяти, управлении и пробовал разные вещи.

Abhishek Tripathi 13.09.2018 20:52

Возможно, вы захотите использовать собственный распределитель, а не переопределять new.

tadman 13.09.2018 20:54
0
3
37
0

Другие вопросы по теме