c 物件建立帶括號與無括號的區別

2021-09-26 15:38:21 字數 823 閱讀 2428

class 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. 2. 

c 物件建立帶括號與無括號的區別

class test test int a 1 棧上建立物件 1.1 無括號 test a 呼叫預設建構函式,棧上分配記憶體建立物件1.2 有括號 很容易犯錯,不會呼叫類的建構函式,相當於宣告乙個函式 test a 無任何意義,宣告乙個返回值為test物件的無參函式1.3 有括號 引數 test a...

C 建立物件時加括號與不加括號的區別

看到一篇文章對建立物件時的集中情況,梳理得很清楚 c 建立物件的語法有 1 在棧上建立 myclass a 2 在堆上建立加括號 myclass a new myclass 3 不加括號 myclass a new myclass 也是在對上建立,並且有乙個自定義型別指標指向myclass 4.my...

C 建立類物件時(無參)後不加括號與加括號的區別

在不考慮用new動態建立物件的情況下,用最普通的 類名 物件名 引數 的方法建立物件 先貼上最正常最普通的 includeusing namespace std class c c intm private intn int main ok,現在我們看看執行結果 ok,預期地執行了第乙個建構函式。但...