Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
C++
Different behavior overloaded global and local operator delete
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="Alex Vinokur, post: 5028106"] 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) // No errors Output Line-49: static void* Foo::operator new(size_t) Line-67: static void Foo::operator delete(void*, size_t) Line-57: static void* Foo::operator new [](size_t) Line-76: static void Foo::operator 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) [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
C++
Different behavior overloaded global and local operator delete
Top