new操作符
new细分为三个步骤:
注意::运算符,作用域运算符。全局,类,命名空间
- 调用operate new(),内部调用malloc()为void*类型
- static_cast转换类型
- 调用构造函数
placement new
placement new允许我们把对象建立在已分配内存的空间上,所以不需要分配空间,但是要指定地址。
char* buf = new char[sizeof(Complex) * 3];
Complex *p = new(buf) Complex(1, 1);
delete []buf;
Complex *p;
void* mem = operator new(sizeof(Complex), buf); //void* operator new(size_t size, void* loc) { return loc; }
p = static_cast<Complex*>(mem;)
p->Complex::Complex(1, 1);
delete操作符
delete细分为两个步骤
- 调用operate delete(),内部调用free()
- 析构函数
delete[]的作用是删除含有指针成员,开辟堆空间的类变量数组,如果这个变量数组是普通类型或者没有指针成员的自定义类,那么delete和delete[]的作用一样