C new物件時有無()的區別

2021-08-17 02:45:41 字數 1227 閱讀 1609

情況1:類中顯式定義預設建構函式

此時new test()和new test並無區別,都會呼叫定義的建構函式,所以下面程式中的輸出結果一樣。

class test 

int getnum()

};int main()

輸出結果:

1       1

請按任意鍵繼續. . .

情況2:沒有定義預設建構函式沒有虛函式(此時編譯器會生成乙個預設建構函式,稱為合成建構函式

此時new test()會呼叫合成建構函式,該建構函式會將類成員初始化,所以下面程式執行後會輸出0;new test不會呼叫合成建構函式,類成員n為隨機值。

class test 

int getnum()

};int main()

輸出結果:

0       -842150451

請按任意鍵繼續. . .

情況3:對於內建型的變數,規則一致:

int* pna = new int;

int* pnb = new int();

cout << *pna << '\t' << *pnb << endl;

輸出結果:

-842150451      0

請按任意鍵繼續. . .

結論:所以平時還是得帶上()啊!

情況4:如果建立乙個物件,類中沒有顯示定義建構函式:

class test 

int getnum()

};int main()

輸出結果:

0       -842150451      -858993460

請按任意鍵繼續. . .

注意:如果類中顯示定義了非預設建構函式未顯示定義預設建構函式,則不能用new test 和new test() ,會提示錯誤!

C new物件與直接宣告物件區別

剛開始使用基本資料型別的時候,相信大家都是直接像下面這樣直接宣告變數。int a double b 在學習了物件之後,發現可以用兩種方式宣告物件。class person intmain 那麼這兩種方式有什麼不同點呢?1.new出來的物件必須用指標接收,需要顯示的delete銷毀 2.記憶體位置不同...

c new 與new 的區別

new和delete運算子用於動態分配和撤銷記憶體的運算子 new用法 1.開闢單變數位址空間 1 new int 開闢乙個存放陣列的儲存空間,返回乙個指向該儲存空間的位址.int a new int 即為將乙個int型別的位址賦值給整型指標a.2 int a new int 5 作用同上,但是同時...

c new與malloc的區別

區別 1.malloc是c 語言的標準庫函式 而new是c 語言中的操作符。2.new返回指定型別的指標,並且可以自動計算所需空間的大小 而malloc必須要由使用者自己計算所需空間大小,並在返回後強行轉換為實際型別的指標。3.malloc只管記憶體分配,不能對所得的記憶體進行初始化,其所獲記憶體空...