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; // 調用默認構造函數(若由編譯器生成則成員不初始化),堆上分配內存創建對象
2.2 有括號
Test *a = new Test(); // 調用默認構造函數(若由編譯器生成則成員初始化),堆上分配內存創建對象
2.3 有括號+參數
Test *a = new Test(2); // 調用構造函數Test(int a),堆上分配內存創建對象
2.4 系統內置類型
new int;// 分配內存,未初始化
new int();// 分配內存,初始化為0
new int(2);// 分配內存,初始化為2