用c++語言開發的乙個難點就是指標,但是指標又是最常用的。有時候開闢了一塊記憶體,但是後續使用完忘記釋放,這就造成記憶體的洩露。為了解決這種尷尬的情況,除了長點心:乙個new對應乙個delete;還有乙個辦法是使用智慧型指標。
這裡我只稍微說下qt的常用的智慧型指標們,和c++11的部分智慧型指標很像。如果對c++的智慧型指標很熟悉,這裡看一眼就沒問題了;若c++基礎不紮實,我找了篇c++11智慧型指標詳解,兩者可以結合著看。
智慧型指標是個類,主要用於管理在堆上分配的記憶體,它將普通的指標封裝為乙個棧物件。
qpointer所指向的物件必須是qobject或其派生類物件。因為其物件析構時會執行qobject的析構函式,進而執行qobjectprivate::clearguards(this);作用物件被銷毀時,自動設定為null,這樣就不會出現野指標誤用的情況了。(注意:寫"."和"->"所呼叫的成員變數是不同的,乙個是qpointer物件本身,乙個是qpointer指向的指標物件。)
還有就是qpointer是執行緒不安全的,注意使用場合。
~student()
};int main(int argc, char *ar**)
student* takedata()
執行結果如下,以下演示了超出作用域後的釋放,和轉移管理權的示例,注意qscopedpointer::data雖然將物件指標給出去了,但是管理權還在qscopedpointer身上。
因為qscopedpointer的拷貝構造和賦值操作私有的,所以不能用作容器的元素。所以就有了qscopedarraypointer。這個用法很簡單不說了,麻煩。
c++基礎沒打好,現在看到一點知識,進行一點學習,加油吧,少年!!
Qt智慧型指標
很簡單的入門程式,應該比較熟悉吧 在 從 qt 的 delete 說開來 一文中,我們提到這個程式存在記憶體洩露 表現就是析構函式不被呼叫 而且當時給出了三種解決方法 注 本文中,我們從智慧型指標 smart pointer 角度繼續考慮這個問題 為了管理記憶體等資源,c 程式設計師通常採用raii...
Qt 智慧型指標學習
很簡單的入門程式,應該比較熟悉吧 從 qt 的 delete 說開來 一文中,我們提到這個程式存在記憶體洩露 表現就是析構函式不被呼叫 而且當時給出了三種解決方法 注 本文中,我們從智慧型指標 smart pointer 角度繼續考慮這個問題 為了管理記憶體等資源,c 程式設計師通常採用raii r...
Qt 智慧型指標例項
myclass const myclass rhs str rhs.str myclass operator const myclass rhs myclass qstring str int main int argc,char argv qdebug test qsharedptr qshare...