new和delete

new操作符

new细分为三个步骤:

注意::运算符,作用域运算符。全局,类,命名空间

  1. 调用operate new(),内部调用malloc()为void*类型
  2. static_cast转换类型
  3. 调用构造函数

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细分为两个步骤

  1. 调用operate delete(),内部调用free()
  2. 析构函数

delete[]的作用是删除含有指针成员,开辟堆空间的类变量数组,如果这个变量数组是普通类型或者没有指针成员的自定义类,那么delete和delete[]的作用一样

delete

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top