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; }
输出结果
呼叫接线员新建 构造函数叫!