1. 程式人生 > >c++物件建立帶括號與無括號的區別

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; // 呼叫預設建構函式(若由編譯器生成則成員不初始化),堆上分配記憶體建立物件
  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
       new int{10};//c++11允許基本型別使用花括號對其進行初始化操作。