定位new运算符,它让你能够指定要使用的位置,可能使用这种特性来设置其内存管理规程,处理需要通过特定地址进行访问的硬件或在特定位置创建对象。

1,头文件<new>

2,将new运算符用于提供了所需地址的参数。

例如:

C++ 定位new运算符

程序中的buffer是char指针,如果要访问buffer1, buffer2 的地址,需使用(void *)进行强制类型转换。

与常规new运算符不同的是:

1,常规new运算符查找一个新的内存块;但定位new运算符使用传递给它的地址,它不跟踪哪些内存单元已被使用,也不查找未经使用的内存块。

2,对于常规new运算符必须要delete掉,才能再次使用该内存块;buffer指定的是静态内存,而delete只能用于指向常规new运算符分配的堆内存。也就是说,数组buffer位于delete的管辖区域之外。

 

定位new运算符的工作原理:基本上它只是返回传递给它的地址,并将其强制类型转换为(void *),以便能够赋给任何指针类型。C++允许重载定位new运算符。

 

再谈new和delete

C++ 定位new运算符

如果对象是动态变量,当执行完定义该对象的程序块时,将调用该对象的析构函数。

如果对象是静态变量(外部,静态,静态外部或来自名称空间),则在程序结束时将调用对象的析构函数。

如果对象是用new创建的,只有当显示的使用delete删除对象时,才会调用析构函数。

所以显示地为使用定位new运算符创建的对象调用析构函数。

例如:

C++ 定位new运算符

对于使用定位new运算符创建的对象,应以与创建顺序相反的顺序进行删除。原因在于,晚创建的对象可能依赖早创建的对象。另外仅当所有对象都被销毁后,才能释放用于存储这些对象的缓冲区。

p2->~just();

p1->~just();

delete [] buffer;

相关文章:

  • 2021-10-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-05
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2021-05-23
  • 2021-06-29
相关资源
相似解决方案