/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
#include <iostream>
using namespace std;
inline void* operator new(size_t size)
{
void* p = ::malloc( size );
fprintf( stderr, "new size %ld: %p\n", size, p );
return p;
}
inline void* operator new[]( size_t size )
{
void* p = ::malloc( size );
fprintf( stderr, "new size[] %ld: %p\n", size, p );
return p;
}
inline void operator delete(void* p,std::size_t sz)
{
fprintf( stderr, "delete: %p\n", p );
::free(p);
}
inline void operator delete[](void* p)
{
fprintf( stderr, "delete []: %p\n", p );
::free(p);
}
class A
{
public:
A() : a(NULL)
{
printf( "A construct\n" );
a = new int[100];
}
~A()
{
printf( "A destruct \n" );
freeA();
}
void freeA()
{
if ( a ) { delete [] a; a = NULL; }
}
void release()
{
delete this;
}
private:
int* a;
};
int main()
{
A * a = new A;
a->release();
return 0;
}