簡體   English   中英

用C ++創建對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM