operator new
operator new
通过C++的网站,可以知道operator new,有三种形式。这里只对第一种进行说明
分配存储空间:默认的分配函数
throwing allocation
分配size存储字节,合适的对齐,用来表示位于那块内存的任何对象,并返回一个指向这块内存的非空指针。
如果失败,会抛出一个bad_alloc异常。
标准库中特殊组件:默认的分配和释放函数;他们有着以下的独有属性:
Global:三种operator new,都是在global命名空间声明的,而不是在std命名空间。
Implicit:无论是否包含了头文件<new>, operator new的前两种都隐式的声明在C++程序的每个转译单元中
Replaceable:operator new的前两种都是可替换的:程序可能提供了它自定义的内存分配来替换默认的内存分配函数,或者针对特定的类型进行了重载。
如果set_new_handler 被用于定义一个new_handler函数,那么这个new_handler函数,在operator new前两种内存申请失败时,会被调用。
operator new作为一个常规功能,可以被显示调用,但是在C++中,new是一个有着特殊行为的运算符:一个包含new运算符的表达式,首先,用指定类型指定的内存大小来调用函数operator new,如果调用成功,它会自动初始或者构造对象。最后表达式计算成一个指向合适类型的指针。
size
申请的内存块的字节数。
在new-expression中指定类型的大小,会被表达式自动调用。
如果参数是0, 函数仍然返回一个独特的非空指针(尽管取消引用这个指针会导致未定义行为)
size_t是个整形。

浙公网安备 33010602011771号