new operator
new operator就是new操作符,不能被重载,假如A是一个类,那么A * a=new A;实际上执行如下3个过程:
- 调用operator new分配内存,operator new (sizeof(A))
- 调用构造函数生成类对象,A::A()
- 返回相应指针
事实上,分配内存这一操作就是由operator new(size_t)来完成的,如果类A重载了operator new,那么将调用A::operator new(size_t ),否则调用全局::operator new(size_t ),后者由C++默认提供。
operator new
operator new是函数,分为三种形式,其中前2种不调用构造函数:
void* operator new (std::size_t size) throw (std::bad_alloc);
void* operator new (std::size_t size, const std::nothrow_t& nothrow_constant) throw();
void* operator new (std::size_t size, void* ptr) throw();
第一、第二个版本可以被用户重载,定义自己的版本,第三种placement new不可重载。
plain new
顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的:
void* operator new(std::size_t) throw(std::bad_alloc);
void operator delete(void *) throw