[英]Creation of an object in C++
是不是
A a = new A(); // A is a class name
應該在C ++中工作?
我正進入(狀態:
從“ A *”到非標量類型“ A”的轉換請求
那行代碼怎么了?
這在Java中有效,對吧?
另外,在C ++中創建A
類型新對象的正確方法是什么呢?
不,不是。 新操作返回指向新創建的對象的指針,因此您需要:
A * a = new A();
您還需要在代碼中的其他位置管理對象的刪除:
delete a;
但是,與Java不同,通常不需要使用C ++動態創建對象,因此應盡可能避免這樣做。 除了上述內容,您還可以簡單地說:
A a;
編譯器將為您管理對象的生存期。
這是非常基礎的東西。 您使用的是哪本C ++教科書,但沒有涵蓋該書?
new A()
返回指針A*
。 你可以寫
A a = A();
它會使用默認構造函數創建一個臨時實例,然后調用copy構造函數以獲得更好的效果:
A a;
只是使用默認構造函數創建一個。 或者,如果您想要一個指針,則可以編寫
A* a = new A();
這可以讓您具有更大的靈活性,但又可以承擔更多責任。
當您要實例化指向對象的指針時,使用關鍵字new
:
A* a = new A();
它被分配到堆上..而當您沒有指針而只有一個真實對象時,您只需使用
A a;
這將聲明該對象並將其實例化到堆棧上(這樣它就可以在調用內部保持活動狀態)
您需要A* a= new A();
new A();
創建並構造類型為A
的對象,並將其放在堆上。 它返回該類型的指針。
換句話說, new
返回對象在堆上的放置地址,而A*
是保存類型A
對象地址的類型A
每當您將堆與new
一起使用時,您都需要在地址上調用關聯的delete
。
new
獲取指向創建對象的指針,因此:
A *a = new A();
首先,new返回一個指針,因此您需要將a的類型聲明為“ A *”。 其次,與Java不同,您不需要在A之后加上括號:
A * a =新A;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.