18.1.6 类特定的new和delete
编译器看到类类型的new或delete表达式的时候,它查看该类是否有operator new或operator delete成员,如果类定义(或继承)了自己的成员new和delete函数,则使用那些函数为对象分配和释放内存;否则,调用这些函数的标准库版本。
1. 成员new和delete函数
如果类定义了这两个成员中的一个,它也应该定义另一个。
类成员operator new函数必须具有返回类型void*并接受size_t类型的形参。由new表达式用以字节计算的分配内存量初始化函数的size_t形参。
类成员operator delete函数必须具有返回类型void。它可以定义为接受单个void*类型形参,也可以定义为接受两个形参,即void*和size_t类型。由delete表达式用被delete的指针初始化void*形参,该指针可以是空指针。如果提供了size_t形参,就用编译器用第一个形参所指对象的字节大小自动初始化size_t形参。
这些函数隐式为静态函数,不必显式地将它们声明为static,虽然这样做是合法的。成员new和delete函数必须是静态的,因为它们要么在构造对象之前使用(operator new),要么在撤销对象之后使用(operator delete),因此,这些函数没有成员可操纵。像任意其他静态成员函数一样,new和delete只能直接访问所属类的静态成员。
2. 数组操作符new[]和操作符delete[]
也可以定义成员operator new[]和operator delete[]来管理类类型的数组。如果这些operator h