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
参考链接: