C++语言中,new表示什么的关键字?

2025-03-22 03:41:08
推荐回答(1个)
回答(1):

“new”是C++的一个关键字,同时也是操作符关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。

new的过程

当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针当然,如果我们创建的是简单类型的变量,那么第二步会被省略假如我们定义了如下一个类A:

class A

{

int i;

public:

A(int _i) :i(_i*_i) {}

void Say()  { printf(\"i=%d\\n\", i); }

};

//调用new:

A* pa = new A(3);

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

A* pa = (A*)malloc(sizeof(A));

pa->A::A(3);

return pa;

虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的因此我们还是要尽可能的使用new,除非有一些特殊的需求

new的三种形态

到目前为止,本文所提到的new都是指的“new operator”或称为“new expression”,但事实上在C++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new