c++对象创建带括号与无括号的区别

时间:2025-03-07 18:10:38
  1. class Test
  2. {
  3. public:
  4. Test() {}
  5. Test(int a) {}
  6. }

1、栈上创建对象
1.1 无括号
Test a; // 调用默认构造函数,栈上分配内存创建对象

1.2 有括号
Test a(); // 无任何意义,声明一个返回值为Test对象的无参函数

1.3 有括号+参数
Test a(2); // 调用构造函数Test(int a),栈上分配内存创建对象

2、堆上创建对象
2.1 如果该类没有定义构造函数(由编译器合成默认构造函数)也没有虚函数,那么Test *a = new Test; 将不调用合成的默认构造函数,而Test *a = new Test();则会调用默认构造函数。

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

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

        2.4    系统内置类型new int;// 分配内存,未初始化
new int();// 分配内存,初始化为0
new int(2);// 分配内存,初始化为2

参考链接:

1. /laogaoyang/p/ 

2. /s/blog_6170d88d0101300e.html