#include <iostream>
class Person
{
public:
Person()
{
if (!isInHeap)
{
throw "not in heap";
}
isInHeap = false;
}
static void *operator new(size_t size)
{
isInHeap = true;
return ::operator new(size);
}
void operator delete(void *ptr)
{
return ::operator delete(ptr);
}
static void *operator new[](size_t size)
{
isInHeap = true;
return ::operator new(size);
}
void operator delete[](void *ptr)
{
return ::operator delete[](ptr);
}
private:
static bool isInHeap;
};
bool Person::isInHeap = false;
void Test()
{
Person *p = new Person;
delete p;
void *rawPtr = new Person();
Person *per1 = static_cast<Person *>(rawPtr);
delete per1;
void *rawPtrList = new Person[10];
Person *pList = static_cast<Person *>(rawPtrList);
delete[] pList;
}
struct TestHeap
{
};
bool CheckIsInHeap(const void *ptr)
{
char stackVar;
return ptr < &stackVar;
}
void Test1()
{
TestHeap t;
std::cout << CheckIsInHeap(&t) << std::endl;
TestHeap *ptr = new TestHeap;
std::cout << CheckIsInHeap(ptr) << std::endl;
static TestHeap *staticPtr = new TestHeap;
std::cout << CheckIsInHeap(staticPtr) << std::endl;
}
int main()
{
Test1();
return 0;
}