程序实例
- C++支持重载new和delete方法,需要重写operator new和operator delete方法。
namespace tt11
{
class Foo
{
public:
Foo() :id(0)
{
cout << "default ctor, this=" << this << ", id= " << id << endl;
}
Foo(int i) :id(i)
{
cout << "ctor int, this= " << this << ", id= " << id << endl;
}
~Foo()
{
cout << "dtor, this= " << this << ", id= " << id << endl;
}
static void* operator new(size_t size);
static void operator delete(void * pdead, size_t size);
public:
int id;
long _data;
string _str;
};
void* Foo::operator new(size_t size)
{
Foo* p = (Foo*)malloc(size);
cout << "operator new, size= " << size << endl;
return p;
}
void Foo::operator delete(void * pdead, size_t size)
{
cout << "operator delete, size= " << size << endl;
free(pdead);
}
}
int main()
{
//使用重新定义的operator new()方法
tt11::Foo* p = new tt11::Foo(7);
cout << p->id << endl;
delete p;
cout << "**************************" << endl;
//使用全局定义的operator new()方法
tt11::Foo* p2 = ::new tt11::Foo(8);
cout << p2->id << endl;
::delete p2;
system("pause");
return 0;
}
结果如下:

说明
- 重新定类在构造函数之前执行的方法。
- 通过size_t变量可以查看定义以对象需要真正申请的空间大小。
- 使用::强制指定全局创建方法,可以屏蔽掉自定义的operator new和operator delete。
本文介绍C++中如何重载new和delete操作符以实现自定义内存管理。通过具体实例展示了如何定义静态成员函数operator new和operator delete来控制内存分配与释放的过程。
419

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



