我在以下運算式中遇到問題:
MyClass *myObject;
MyClass *myObject = new MyClass();
它們之間有什么區別?
uj5u.com熱心網友回復:
不同之處在于:
in
MyClass *myObject;,myObject未初始化,因此沒有指向任何有意義的內容in
MyClass *myObject = new MyClass();,myObject被初始化為指向new創建的物件。
uj5u.com熱心網友回復:
int a;
它有什么有意義的價值嗎?沒有,因為 'a' 未初始化。
int a = 5;
它有什么有意義的價值嗎?是的。'a' 已初始化為值 5。
以同樣的方式
MyClass *myObject;
它有什么有意義的價值嗎?否。myObject 未初始化。所以它有一些垃圾/隨機值。
MyClass *myObject = new MyClass();
它有什么有意義的價值嗎?是的。已動態分配了足夠的記憶體來容納“Myclass”,并且 myObject 指向已分配記憶體的開始。
uj5u.com熱心網友回復:
不同之處在于該型別指標的一個宣告MyClass *沒有顯式初始化程式,而另一個則具有顯式初始化程式。
在本宣告中
MyClass *myObject;
如果在沒有存盤類說明符的塊作用域中宣告指標,則該指標未初始化并且具有不確定的值static。
如果它在命名空間中或使用存盤類說明符宣告,則static它被初始化為空指標。也就是說,在這種情況下,宣告等效于
MyClass *myObject = nullptr;
在本宣告中
MyClass *myObject = new MyClass();
指標由動態分配物件的地址初始化。
您也可以重寫最后一個宣告,如
auto myObject = new MyClass();
因為名稱的型別myObject將從它的初始值設定項推匯出來,該初始值設定項來自運算式new MyClass()。
請注意,您可能會拆分此宣告
MyClass *myObject = new MyClass();
分成兩個陳述句,如
MyClass *myObject;
myObject = new MyClass();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342880.html
上一篇:通過指標訪問結構
