Why the operator delete does not get called?

Viewed 92

I've created the following demo program regarding operator new and operator delete.

void* operator new(size_t size)
{
    void* ptr = std::malloc(size);
    std::cout << "allocated [" << size << "] bytes address [" << ptr << "]" << std::endl;
    return ptr;
}

auto operator delete(void* addr) noexcept -> void
{
    std::cout << "freed address [" << addr << "]" << std::endl;
    return std::free(addr);
}

In main, I try to do this:

int main()
{
            auto ptr = new int(10);
            delete ptr;
}

However, I could see the log of operator new but could not see that of operator delete

allocated [4] bytes address [0x192bcc41900]

It is interesting that for a class customized operator new and operator delete, there is no such problem.

class A
{
public:
    A()
    {
        std::cout << "A::ctor" << std::endl;
    }
    ~A()
    {
        std::cout << "A::dtor" << std::endl;
    }
    void* operator new(size_t size)
    {
        void* ptr = std::malloc(size);
        std::cout << "A::new allocated [" << size << "] bytes address [" << ptr << "]" << std::endl;
        return ptr;
    }

    void operator delete(void* addr) noexcept
    {
        std::cout << "A::delete freed address [" << addr << "]" << std::endl;
        return std::free(addr);
    }

private:
    int m_int = 10;
};

I can see both logs when I new a A class object and then delete it.

auto ptr = new int(10);
delete ptr;

What's wrong with this?

0 Answers
Related