classHeapClass { private: void* operatornew[](size_tsize); typedefconstvoid * RawAddress; voidoperatordelete[](void* ptr); public: voidoperatordelete(void *ptr) { printf("delete\n"); ::operatordelete(ptr); m_address.erase(std::remove(m_address.begin(),m_address.end(),ptr),m_address.end()); return; } void* operatornew(size_tsize) { printf("new\n"); void * ptr = ::operatornew(size); m_address.push_back(ptr); returnptr; } HeapClass() { printf("Constructor!\n"); } HeapClass(constHeapClass&) { printf("copy Constructor!\n"); } virtualvoidDestory() const {deletethis;} virtual ~HeapClass() = 0; boolisOnHeap() const { // const void * rawAddress = dynamic_cast<const void *>(this); constvoid * rawAddress = (constvoid *)(this); std::deque<RawAddress>::iteratoriter = std::find(m_address.begin(),m_address.end(),rawAddress); returniter != m_address.end(); } private: staticstd::deque<RawAddress> m_address; };
HeapClass::~HeapClass(){} std::deque<HeapClass::RawAddress> HeapClass::m_address; classDHeapClass:publicHeapClass {}; |