簡體   English   中英

QT中未初始化的指針

[英]Non Initialized Pointers in QT

在QT中,我遵循在頭文件中編寫接口的方式,然后在.cpp文件中編寫實現的方式。 就我而言,我有一個MainApplication和兩個對話框作為MainApplication的子級

因此在MainApplication標頭中,指向兩個對話框的兩個未初始化的指針

 MemberForm *memberForm;
AboutForm *aboutUsForm;

據我所知,指針將為Null,並且以下條件的計算結果為true

memberForm == NULL //False
aboutUsForm == NULL //False

據我所知,所有未初始化的指針都是NULL指針,所以這對我來說很奇怪。 是什么使得刪除標頭中的指針之一變得更奇怪,條件評估為true

 MemberForm *memberForm;
//AboutForm *aboutUsForm; // Removing the pointer

條件評估為真

memberForm == NULL //True 

感謝您的回應。 PS:如果您要拒絕該帖子,請發表評論解釋原因..

堆分配對象的原始(“裸”)指針成員不會在C或C ++中初始化。 它們的值是不確定的,在第一次初始化之前不能依賴它們。 無論您擁有什么價值,您都是通過巧合而不是通過設計獲得的。

通常,在C ++中指向堆上分配的對象的原始指針是一針見血的肯定方式,並且通常是不良設計的標志。 將C的不安全方面拖入C ++確實沒有意義。 您擁有C ++的強大功能,可以利用它來幫助自己。

QScopedPointer這樣的智能指針具有更QScopedPointer行為,您應該改用它。

  1. 您可以檢查它是否已初始化。

  2. 您無需擔心刪除指向值。 當智能指針被銷毀時,它將自動刪除-在編譯器生成的析構函數代碼針對包含智能指針的類運行時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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