c++创建对象带括号和不带括号的区别

1
2
3
4
5
6
class Test
{
public:
  Test() {}
  Test(int a) {}
}

1、栈上创建对象

1.1 无括号

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

  1.2 有括号

1
2
//无任何意义,声明一个返回值为Test,参数为空,名字叫做a的函数
Test a();

  1.3 有括号+参数

1
2
//调用构造函数Test(int a),栈上分配内存创建对象
Test a(2);

2、堆上创建对象

2.1 无括号

1
2
//调用默认构造函数(若由编译器生成则成员不初始化),堆上分配内存创建对象
Test *a = new Test;

  2.2 有括号

1
2
//调用默认构造函数(若由编译器生成则成员初始化),堆上分配内存创建对象
Test *a = new Test();

  2.3 有括号+参数

1
Test *a = new Test(2); // 调用构造函数Test(int a),堆上分配内存创建对象

  2.4 系统内置类型

1
2
3
new int;// 分配内存,未初始化
new int();// 分配内存,初始化为0
new int(2);// 分配内存,初始化为2

转载自其他网站