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

class Test
{
public:
  Test() {}
  Test(int a) {}
}

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. https://www.cnblogs.com/laogaoyang/p/5757453.html 

2. http://blog.sina.com.cn/s/blog_6170d88d0101300e.html

原文地址:https://www.cnblogs.com/a3192048/p/12241239.html