欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++中New的使用简介

程序员文章站 2022-06-21 13:24:08
...

(转自:https://blog.csdn.net/u012278016/article/details/79930924
C++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new

new operator(new expression)

当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:

  1. 获得一块内存空间
  2. 调用构造函数
  3. 返回正确的指针

假如我们定义了如下一个类A:

class A{
int i;
public:
  A(int _i) :i(_i*_i) {}
  void Say()  { printf("i=%dn", i); }
  };
//调用new:
A* pa = new A(3);

那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):

A* pa = (A*)malloc(sizeof(A));
pa->A::A(3);
return pa;

operator new

new的第二种形态——operator new,new operator的第一步分配内存实际上是通过调用operator new来完成的,这里的new实际上是像加减乘除一样的操作符,因此也是可以重载的。operator new默认情况下首先调用分配内存的代码,尝试得到一段堆上的空间,如果成功就返回,如果失败,则转而去调用一个new_hander,然后继续重复前面过程。

placement new

new的第三种形态——placement new,new operator的第二部定位构造实际上是通过调用placement new来完成的,也就是在取得了一块可以容纳指定类型对象的内存后,在这块内存上构造一个对象。

对头文件或<new.h>的引用是必须的,这样才可以使用placement new。

相关标签: New