C++ new用法

时间:2025-04-23 08:26:06

C++使用new时

堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete

语法:new 数据类型

利用new创建的数据,会返回该数据对应的类型的指针

创建类时候,会开辟内存空间并且调用构造函数。

所以可以出现以下代码

Building * building;(声明创建building)

building = new Building; (new创建一个无名对象)

2022.12.25添加。

此外, 使用building = new Building; 生成一个类时,类似调用无参构造,但仍有区别

building = new Building ,近似看成building = new Building();

转载于链接

        很多人都说,加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数。这是有问题的。

对于自定义类类型:

       如果该类没有定义构造函数(由编译器合成默认构造函数)也没有虚函数,那么class c = new class;将不调用合成的默认构造函数,而class c = new class();则会调用默认构造函数。

       如果该类没有定义构造函数(由编译器合成默认构造函数)但有虚函数,那么class c = new class;和class c = new class();一样,都会调用默认构造函数。

       如果该类定义了默认构造函数,那么class c = new class;和class c = new class();一样,都会调用默认构造函数。

对于内置类型:

       int *a = new int;不会将申请到的int空间初始化,而int *a = new int();则会将申请到的int空间初始化为0。

 以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0:

  1. int *p1 = new int[10];  
  2. int *p2 = new int[10]();  

结论:别使用不带括号的new。