dyncast5.c
来自「this is a gcc file, you can download it 」· C语言 代码 · 共 72 行
C
72 行
#include <stddef.h>void *p;int fail;class HeapTracked {public: virtual ~HeapTracked() = 0; void *operator new(size_t size); void operator delete(void *ptr); static bool isObjectAllocation(const HeapTracked *ptr);};HeapTracked::~HeapTracked(){}void * HeapTracked::operator new(size_t size){ void * memPtr = ::operator new(size); p = memPtr; return memPtr;}void HeapTracked::operator delete(void *ptr){ if (p != ptr) fail = 1; ::operator delete(ptr);}bool HeapTracked::isObjectAllocation(const HeapTracked *ptr){ if (p != const_cast<void*>(dynamic_cast<const void*>(ptr))) fail = 1; return false;}class Mumble1: public virtual HeapTracked { double d;public: virtual ~Mumble1(){}};class Mumble2: public virtual HeapTracked { double d;public: virtual ~Mumble2(){}};class Foo: virtual public HeapTracked, virtual public Mumble1, virtual public Mumble2 {public: ~Foo(){}};int main(){ Foo *pf = new Foo; pf->isObjectAllocation(pf); Mumble1 *pm1 = pf; pm1->isObjectAllocation(pm1); Mumble2 *pm2 = pf; pm2->isObjectAllocation(pm2); // delete pf; // delete pm1; delete pm2; return fail;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?