1樓:Acjx
A*pnt1
=newA;
A*pnt2
=new
A();
對於C++03標準來說,new A()一定是進行值初始化(value initialize),分為3種情況,如下:
1. 如果A是標量型別(例如:bool,int,char,double,指標)的話,A進行的是zero-initialize,也就是用0來初始化;
2. 如果A是非POD的普通類型別的話,則A()呼叫預設建構函式來進行初始化。
3. 如果A是POD類型別,通常編譯器不會為A生成預設建構函式,那麼A()值初始化時,其資料成員分別進行值初始化(聯絡1)。
對於 new A 來說,情況如下:
1. 如果A是標量型別(例如:bool,int,char,double,指標)的話,A沒有被初始化,產生未定義的值。
2. 如果A是非POD的普通類型別的話,則A呼叫預設建構函式來進行初始化。
3. 如果A是POD類型別,其資料成員並未進行初始化,產生未定義的值。
2樓:Clones
編譯器並不總是產生預設建構函式,也不是所有產生的預設建構函式都是non-trivial的。
具體參見《深度探索C++物件模型》
3樓:鍾宇騰
A*pnt1
=newA;
A*pnt2
=new
A();
這兩個呼叫是有區別的。
如果``class A``定義了乙個預設建構函式的話,那麼這兩句沒有區別。否則,上面一句呼叫就不會初始化普通型別(int, double之類的POD型別)值;而下面一句就會用預設值初始化它們。
Reference:
Do the parentheses after the type name make a difference with new?
4樓:柯煦
C++的類建構函式沒有義務初始化每乙個基本變數。整形和浮點值會被初始化為任意值(什麼都有可能,0也有可能),而成員類的預設建構函式會被依次呼叫。你試試多執行幾次程式,看看結果有沒有變化?
另外你的編譯環境和作業系統是什麼?
c 類的建構函式初始化問題??
Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...
C 的建構函式與析構函式?
關於C 的問題,你的心中要有兩個概念,乙個是記憶體的分配,二是記憶體的初始化。C 的建構函式有兩個作用 第一,你必須要有乙個建構函式,compiler才會去給你分配記憶體。第二,分配了記憶體之後,再用建構函式去初始化記憶體。函式體為空,因為類中的每乙個成員都有預設建構函式和析構函式 否則是無法編譯的...
C 中,既然有了建構函式, 那麼拷貝建構函式存在的意義是?
白白小白 copy constructor 建立物件的時候,用同一類的物件對它進行初始化的時候會自動呼叫拷貝建構函式。Aa Ab a 或者傳參Ab f b 或者返回值是物件Af 語法 public A constA a 我們首先希望傳參的時候不會對原來的物件產生修改,所以使用了const型別 避免迴...