C ++中的“new operator”和“operator new”之间的区别?

在C ++中,当我们要创建一个新对象时,我们必须在内存中创建一个内存块,然后调用构造函数来初始化该内存块。我们可以使用new关键字创建存储元素。这个new运算符正在执行两个连续任务。但是新的运算符仅会创建存储空间。

new关键字

new运算符是一种特殊的运算符,表示对堆部分进行内存分配的请求。当有足够的内存可用时,只有新的运算符将内存初始化为指针变量。当我们使用普通的new关键字创建对象时,它将执行两个连续的任务

  • ?将对象的内存块分配到堆部分

  • ?调用构造函数初始化内存块。

范例程式码

#include <iostream>
using namespace std;
class Box {
   public:   Box() {
      cout << "构造函数叫!" <<endl;
   }
};
int main() {
   Box* myBox = new Box;
}

输出结果

构造函数叫!

运算符new

运算符new是一个函数。此函数用于使新运算符重载。使用这个我们可以分配原始内存块。这在概念上类似于malloc()calloc()方法。该函数不会调用构造函数,因此不会初始化内存。但是,从此重载方法返回指针后,编译器将在此之后调用构造函数。

范例程式码

#include <iostream>
#include <cstdlib>
using namespace std;
class Box {
   public:
   Box() {
      cout << "构造函数叫!" <<endl;
   }
   void *operator new(size_t size) {
      cout << "呼叫接线员新建"<<endl;
      void *p = malloc(size);
      return p;
   }
};
int main() {
   Box* myBox = new Box;
}

输出结果

呼叫接线员新建
构造函数叫!