C++中new、operator new和placement n

2019-10-10  本文已影响0人  Mr_约科

1. new

(1)C++对象实例化的时候使用new关键字和不使用new关键字的区别
(2)new之后,编译器做了哪些事情
Temp* t = new Temp();

因此在C++中使用new关键字相当于先申请内存后执行构造函数;使用delete相当于先执行析构函数后释放内存。

2. operator new

3. placement new

(1)使用背景

如果多次都需要申请一块类似的内存,然后去释放。而每一次内存的申请,系统都需要在在堆中找到一块合适大小的内存空间,这个操作速度是很慢的,极端情况下,如果当前系统有大量的内存碎片,并且我们申请的空间很大,有可能出现无法分配内存的异常(空间不够)。
当我们觉得默认的new operator 对内存的管理不能满足我们的需要,而想自己手动管理内存时,就使用placement new,来公用一块我们事先准备好的内存。

placement new 的作用就是:创建对象(调用该类的构造函数)但是不分配内存,而是在已有的内存块上面创建对象。

(2)使用方法

在使用new关键字建里一个新对象的时候,在编译器的第二步就是调用对象的构造函数生成类对象。这一步使用的就是placement new来实现的,即在取得了一块可以容纳指定对象的内存之后,在这块内存上构造一个对象,省略中间多次分配内存

类名* 对象名 = new(已有的内存空间指针) 类名;

例如

class Person
{

};

int main()
{
  void* memory = malloc(sizeof(Person));//申请内存空间
  cout << memory << endl;
  Person* p = new(memory) Person;//创建对象,调用构造函数
  cout << p <<endl;
  delete p;//销毁对象
  return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读