如大家所了解的,在现代主流面向对象语言中,new是一个非常人尽皆知的操作,其用于向堆内存申请一定的空间,并构造出一个对象。
而 new 操作一般来说会经过以下三个步骤:
向堆申请对应大小的空间;
调用指定对象的指定构造器;
返回空间的地址或引用。
了解到这一步,对于大多数开发者而言已经是能够应付开发中的大多数场景。
而在 C++ 语言中,为了保证能够其对内存有更加自由的操作,所提出的拓展性极为丰富。

new的基本使用
虽然 new 操作一直被大家非常频繁的使用,但是对于一些比较特殊的情况,却很少有人注意。下面来先介绍以下 new 的基础使用方式。
单个对象
new 操作最基本的用法就是 new 出一个对象了。这个对象可以是基本的数据类型,也可以是自定义的类型,最常见的就是一个类对象。
而当对基本类型不指定具体初始化数据时,就会出现所谓的垃圾值。而当类可以进行默认构造时,也可以不进行任何修饰,但同样的可以调用指定的构造函数。
在 C 语言中,使用 malloc(),返回的是 void* 类型。而 C++ 中的 new Type 返回的是具体 Type* 的类型,因此这里还可以使用 auto 来自动识别指针类型。
struct Node {
int x;
Node(int x) {
this->x = x;
}
};
int main() {
int* p = new int;
auto nodep = int Node(1);
}