new与malloc比较与底层实现
1.new与 operator new() 关系,placement new 作用
new指C++里通常用运算符,不可重载,比如A* a = new A; (1)调用:operator new()分配内存,(2)执行构造函数,返回指向分配内存的指针
operator new():指对new的重载形式,它是一个函数,并不是运算符。对于operator new来说,分为全局重载和类重载,全局重载是void* ::operator new(size_t size),在类中重载形式 void* A::operator new(size_t size),重载后形参可能发生变化的。
A* a = new A 的调用过程为:(1)分配内存:调用operator new()分配内存,如果是类重载则是调用如果类A重载了operator new,那么将调用A::operator new(size_t ),如果没有重载,就调用全局::operator new(size_t ),事实上都是调用系统默认的全局::operator new(size_t size),调用malloc分配内存,并且返回一个void*指针。此外,类重载可以只是指定了内存分配失败的调用的new_handler处理函数,改写为global_new_handler,类对象析构后之后global_new_handler复位,分配失败抛出异常。(2)构造函数:执行构造函数,返回指向分配内存的指针