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?