原文地址 C++中建立對象的時候加括弧和不加括弧的區別
c++建立對象的文法有—–
1 在棧上建立 MyClass a;
2 在堆上建立加括弧 MyClass *a= new MyClass();
3 不加括弧 MyClass *a = new MyClass;
4.—————MyClass a();聲明了一個傳回值為MyClass類型的無參函數。
#include <iostream> class MyClass { public: MyClass() { std::cout << "Hello MyClass!" << std::endl; } MyClass(int i):num(i) { std::cout << "Hello MyClass!------int" << std::endl; } void MyMethod() { std::cout << "輸出成員num: " <<num << std::endl; } private: int num; }; int main() { //---------------對於調用建構函式 MyClass c1;//表示使用不帶參數的建構函式,或者有預設參數值的建構函式。 MyClass c2();//不會調用無參建構函式,各種情況下該處是聲明一個傳回值為MyClass類型的函數而已 MyClass c3(1);//調用參數為int的建構函式 /*---------------對於new關鍵字加括弧和不加括弧的區別--- 1.對於自訂類型來說沒有區別,都是使用預設建構函式 2.對於內建類型來說加括弧會初始化 */ std::cout<<std::endl; MyClass *c4 = new MyClass(); c4->MyMethod(); MyClass *c5 = new MyClass(1); c5->MyMethod(); MyClass *c6 = new MyClass; c6->MyMethod(); //內建類型 std::cout<<std::endl; int *pint1 = new int(1); int *pint2 = new int(); int *pint3 = new int; std::cout<<*pint1<<" "<<*pint2<<" "<<*pint3<<std::endl; return 0; }
結果:
結論:new 關鍵字建立對象時 對於內建類型:加括弧會初始化,不加括弧不初始化;對於自訂類型,都會調用預設建構函式,加不加括弧沒區別。