在C ++中,当我们要创建一个新对象时,我们必须在内存中创建一个内存块,然后调用构造函数来初始化该内存块。我们可以使用new关键字创建存储元素。这个new运算符正在执行两个连续任务。但是新的运算符仅会创建存储空间。
new运算符是一种特殊的运算符,表示对堆部分进行内存分配的请求。当有足够的内存可用时,只有新的运算符将内存初始化为指针变量。当我们使用普通的new关键字创建对象时,它将执行两个连续的任务
?将对象的内存块分配到堆部分
?调用构造函数初始化内存块。
#include <iostream>
using namespace std;
class Box {
public: Box() {
cout << "构造函数叫!" <<endl;
}
};
int main() {
Box* myBox = new Box;
}输出结果
构造函数叫!
运算符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;
}输出结果
呼叫接线员新建 构造函数叫!