条款51:编写 new 和 delete 时需固守常规
Adhere to convention when writing new and delete.
operator new
的返回值十分单纯,如果它有能力供应客户申请的内存,就返回一个指针指向那块内存;如果没有能力,就调用 new-handler 函数,直至成功或是抛出 bad_alloc 异常。
operator new
成员函数会被 derived class 继承,这会导致有可能 base class 的 operator new
被调用以分配 derived class 对象,为了避免这种情况,base class 专属的 operator new
需要判断大小:
对于 operator new[]
,唯一要做的事情就是分配一块未加工内存(raw memory),因为你无法对 array 之内迄今为止尚未存在的元素对象做任何事情。
operator delete
只需记住的事情是保证“删除null指针永远正确“。
Last updated
Was this helpful?