Operator new 的重载
Contents
new作为关键字是不能被重载的。当new作为关键字的时候的行为是:
- 调用operator new分配内存。
- 调用构造函数生成对象。
- 返回相应的指针。
new的行为是不能被改变的,但是这里的operator new的行为是可以改变的。也就是对operator new的重载。
0.0.1 new 运算符表达式的重载
operator new操作符可以被每个类作为成员函数重载,也可以作为全局函数重载。这里应该是推荐作为成员函数重载的。
0.0.1.0.1 void operator new(size_t size) throw(std::bad_alloc);*
参数是一个size_t
类型,指明了要分配的内存的大小。
|
|
如果在构造函数执行的时候发生异常,在栈展开的过程中,要回收在第一步中operator new分配的内存的时候,会调用想对应的operator delete函数。
0.0.1.0.2 void operator new[](size_t size) throw(std::bad_alloc);*
用于分配数组对象内存的new操作符。如果数组的基类型没有这个成员函数的话,会调用全局的版本分配内存。
|
|
0.0.1.0.3 void operator new(size_t,void)**
带位置的new操作符(placement new)重载版本。C++标准库中已经提供了这个版本的简单实现,只是简单的返回参数指定的地址。
|
|
0.0.1.0.4 自行定制参数的operator new函数
|
|
这时候就可以自定义参数以及其行为。
|
|
reference: