#include <iostream>
const int size = 1024;
char pool[size];
int nextFree = 0;
class A
{
public:
int i = 123; // some data
A() { std::cout << "constructor\n"; }
~A() { std::cout << "destructor\n"; }
static void* operator new(std::size_t size) noexcept
{
void *ptr = &pool[nextFree];
nextFree += size;
return ptr;
}
static void operator delete(void* ptr, std::size_t size) noexcept
{
//memset(ptr, 0, size); for example
}
};
int main()
{
A* a = new A();
std::cout << std::boolalpha << (a == reinterpret_cast<A*>(&pool[0])) << std::endl;
delete a;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3QgaW50IHNpemUgPSAxMDI0OwpjaGFyIHBvb2xbc2l6ZV07CmludCBuZXh0RnJlZSA9IDA7CgpjbGFzcyBBCnsKcHVibGljOgoJaW50IGkgPSAxMjM7IC8vIHNvbWUgZGF0YQoKCUEoKSB7IHN0ZDo6Y291dCA8PCAiY29uc3RydWN0b3JcbiI7IH0KCX5BKCkgeyBzdGQ6OmNvdXQgPDwgImRlc3RydWN0b3JcbiI7IH0KCglzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90IHNpemUpIG5vZXhjZXB0Cgl7CgkJdm9pZCAqcHRyID0gJnBvb2xbbmV4dEZyZWVdOwoJCW5leHRGcmVlICs9IHNpemU7CgkJcmV0dXJuIHB0cjsKCX0KCglzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzdGQ6OnNpemVfdCBzaXplKSBub2V4Y2VwdAoJewoJCS8vbWVtc2V0KHB0ciwgMCwgc2l6ZSk7IGZvciBleGFtcGxlCgl9Cn07CgppbnQgbWFpbigpCnsKCUEqIGEgPSBuZXcgQSgpOwoJc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8IChhID09IHJlaW50ZXJwcmV0X2Nhc3Q8QSo+KCZwb29sWzBdKSkgPDwgc3RkOjplbmRsOwoJZGVsZXRlIGE7Cn0=