Different behavior overloaded global and local operator delete

A

Alex Vinokur

Hi,

Different behavior overloaded global and local operator delete.

We can see see that overloaded global operator delete(void *i_p,
std::size_t i_size) is not recognized.

Any suggestions.

Thanks


// ===========================================
// File foo.cpp
#include <memory>
#include <iostream>

#define SHOW_FUNC std::cout << "Line-" << __LINE__ << ": " <<
__PRETTY_FUNCTION__ << std::endl

// ---------------------------------
// Global new & delete
// ---------------------------------
void* operator new(std::size_t i_size)
{
SHOW_FUNC;
void* p = malloc(i_size);
// Do something
return p;

}
void* operator new[] (std::size_t i_size)
{
SHOW_FUNC;
void* p = malloc(i_size);
// Do something
return p;

}


void operator delete(void *i_p, std::size_t i_size)
{
SHOW_FUNC;
// Do something
free(i_p);
}



void operator delete[](void *i_p, std::size_t i_size)
{
SHOW_FUNC;
// Do something
free(i_p);
}


// ---------------------------------
struct Foo
{
void* operator new(std::size_t i_size)
{
SHOW_FUNC;
void* p = malloc(i_size);
// Do something
return p;

}
void* operator new[] (std::size_t i_size)
{
SHOW_FUNC;
void* p = malloc(i_size);
// Do something
return p;

}


void operator delete(void *i_p, std::size_t i_size)
{
SHOW_FUNC;
// Do something
free(i_p);
}



void operator delete[](void *i_p, std::size_t i_size)
{
SHOW_FUNC;
// Do something
free(i_p);
}

};



// ====================
int main()
{

Foo* p1 = new Foo;
delete p1;

Foo* p2 = new Foo[2];
delete [] p2;

Foo* p3 = ::new Foo;
::delete p3;

Foo* p4 = ::new Foo[2];
::delete [] p4;

return 0;
}
// ===========================================


Linux
gcc version 4.1.2 20080704 (Red Hat 4.1.2-52)
g++ foo.cpp
// No errors


Output
Line-49: static void* Foo::eek:perator new(size_t)
Line-67: static void Foo::eek:perator delete(void*, size_t)
Line-57: static void* Foo::eek:perator new [](size_t)
Line-76: static void Foo::eek:perator delete [](void*, size_t)
Line-11: void* operator new(size_t)
// Not printed -> Line-29: void operator delete(void*, size_t)
Line-19: void* operator new [](size_t)
// Not printed -> Line-38: void operator delete [](void*, size_t)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top