Skip to content

Instantly share code, notes, and snippets.

@basavesh
Created September 29, 2025 20:39
Show Gist options
  • Save basavesh/ce35a98f19bb12a1efc13338d8c55ea8 to your computer and use it in GitHub Desktop.
Save basavesh/ce35a98f19bb12a1efc13338d8c55ea8 to your computer and use it in GitHub Desktop.
// demo_new_delete.cpp
#include <cstddef>
#include <new>
struct Base {
Base();
virtual ~Base(); // virtual => emits D0, D1, D2
static void* operator new(std::size_t);
static void operator delete(void*) noexcept;
};
struct Derived : Base {
Derived();
~Derived() override;
static void* operator new(std::size_t);
static void operator delete(void*) noexcept;
};
Base::Base() {}
Base::~Base() {}
void* Base::operator new(std::size_t n) { return ::operator new(n); }
void Base::operator delete(void* p) noexcept { ::operator delete(p); }
Derived::Derived() {}
Derived::~Derived() {}
void* Derived::operator new(std::size_t n) { return ::operator new(n); }
void Derived::operator delete(void* p) noexcept { ::operator delete(p); }
@basavesh
Copy link
Author

clang++ -std=c++17 -O0 -fno-inline -c demo_new_delete.cpp -o demo.o
nm -C demo.o | egrep 'Base|Derived|operator new|operator delete'
nm demo.o | egrep 'Base|Derived|_Znwm|_ZdlPv'
objdump -dr demo.o | less

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment