QPointer除了封裝指針,對外表現的像普通指針一樣,還提供了守護功能。
作用:如下代碼,在delete後,QPointer指針內存在的實際指針,被自動置0了,從而避免了懸掛指針。以前一直以爲這個是隻能指針,實際上不一樣的,智能指針主要確保動態分配內存被恰當的釋放,避免內存泄漏,也可以防止懸掛指針。但是QPointer無法做到恰當釋放,QSharedPointer纔是的。
有一個全局的守護哈希表,用於存儲所有的QObejct對象被守護的QPointer指針。構造QPointer時添加到哈希表,QObject對象析構時,從哈希表中移除。
每個QObject對象的數據成員QObjectPrivate(繼承自QObjectData),都包含一個標記hasGuards,表明自己是否有守護指針存在。