C++中新的VS操作符

当您创建一个新对象时,使用操作符new函数分配内存,然后调用构造函数来初始化内存。在这里,新操作符同时执行分配和初始化,其中作为操作符,new只执行分配。 让我们看看这两种方法各自是如何工作的。

null

新关键字

新接线员是一名 操作人员 这表示请求在堆上分配内存。如果有足够的内存可用,new运算符将初始化内存,并将新分配和初始化的内存的地址返回给指针变量。当您使用new关键字(normal new)创建类的对象时。

  • 对象的内存是使用 新接线员 从堆里。
  • 调用该类的构造函数来正确初始化该内存。

// CPP program to illustrate
// use of new keyword
#include<iostream>
using namespace std;
class car
{
string name;
int num;
public :
car(string a, int n)
{
cout << "Constructor called" << endl;
this ->name = a;
this ->num = n;
}
void enter()
{
cin>>name;
cin>>num;
}
void display()
{
cout << "Name: " << name << endl;
cout << "Num: " << num << endl;
}
};
int main()
{
// Using new keyword
car *p = new car( "Honda" , 2017);
p->display();
}


输出:

Constructor called
Name: Honda
Num: 2017

新接线员

新接线员是 作用 它分配原始内存,在概念上有点类似于 malloc() .

  • 它是覆盖默认堆分配逻辑的机制。
  • 它不会初始化内存,即不调用构造函数。然而,在重载新返回之后,编译器会自动调用构造函数(如果适用)。
  • 也有可能 超载操作员新 要么是全局的,要么是特定的类

// CPP program to illustrate
// use of operator new
#include<iostream>
#include<stdlib.h>
using namespace std;
class car
{
string name;
int num;
public :
car(string a, int n)
{
cout << "Constructor called" << endl;
this ->name = a;
this ->num = n;
}
void display()
{
cout << "Name: " << name << endl;
cout << "Num: " << num << endl;
}
void *operator new ( size_t size)
{
cout << "new operator overloaded" << endl;
void *p = malloc (size);
return p;
}
void operator delete ( void *ptr)
{
cout << "delete operator overloaded" << endl;
free (ptr);
}
};
int main()
{
car *p = new car( "HYUNDAI" , 2012);
p->display();
delete p;
}


输出:

new operator overloaded
Constructor called
Name:HYUNDAI
Num:2012
delete operator overloaded

新操作员vs新操作员

  1. 操作员与功能: new是一个运算符,也是一个关键字,而operator new只是一个函数。
  2. 新呼叫“新接线员”: “new operator”调用“operator new()”,就像+operator调用operator+()
  3. “Operator new”可能会过载: Operator new可以重载,就像允许我们执行定制任务的函数一样。
  4. 内存分配: “new expression”调用“operator new”来分配原始内存,然后调用构造函数。

本文由 亚什·辛拉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享