class MemoryDemo
{
public:
MemoryDemo() {}
~MemoryDemo() {}
void* operator new(size_t size) throw(bad_alloc);
void operator delete(void* ptr) throw();
void* operator new[] (size_t size) throw(bad_alloc);
void operator delete[](void* ptr) throw();
void* operator new(size_t size, const nothrow_t&) throw();
void operator delete(void* ptr, const nothrow_t&) throw();
void* operator new[](size_t size, const nothrow_t&) throw();
void operator delete[](void* ptr, const nothrow_t&) throw();
};
void* MemoryDemo::operator new(size_t size) throw(bad_alloc)
{
cout<< "operator new!\n";
return (::operator new(size));
}
void MemoryDemo::operator delete(void* ptr) throw()
{
cout<< "operator delete!\n";
::operator delete(ptr);
}
void* MemoryDemo::operator new[](size_t size) throw(bad_alloc)
{
cout<<"operator new[]!\n";
return (::operator new[](size));
}
void MemoryDemo::operator delete[](void* ptr) throw()
{
cout<<"operator delete[]!\n";
::operator delete[](ptr);
}
void* MemoryDemo::operator new(size_t size, const nothrow_t&) throw()
{
cout<<"operator new nothrow!\n";
return (::operator new(size,nothrow));
}
void MemoryDemo::operator delete(void* ptr, const nothrow_t&) throw()
{
cout<<"operator delete nothrow!\n";
::operator delete[](ptr,nothrow);
}
void* MemoryDemo::operator new[](size_t size, const nothrow_t&) throw()
{
cout<<"operator new[] nothrow!\n";
return (::operator new[](size,nothrow));
}
void MemoryDemo::operator delete[](void* ptr, const nothrow_t&) throw()
{
cout<<"operator delete[] nothrow!\n";
::operator delete[](ptr,nothrow);
}
void main()
{
MemoryDemo* pMem = new MemoryDemo();
delete pMem;
pMem = new MemoryDemo[10];
delete []pMem;
pMem = new (nothrow) MemoryDemo();
delete pMem;
pMem = new (nothrow) MemoryDemo[10];
delete []pMem;
}
在重载 operator new时,还要重载相应形式的 operator delete,否则,会按你指定的方式分配内存,但释放时则按照内置yuyi,可能存在不兼容。
本文介绍了一个C++类MemoryDemo,该类重载了new和delete运算符以实现自定义内存管理。通过重载不同形式的new和对应的delete,确保了内存分配与释放的一致性。
2525

被折叠的 条评论
为什么被折叠?



