STL之防止內存泄露

jopen 10年前發布 | 15K 次閱讀 STL C/C++開發

       可以自由分配和釋放內存造就了C++的靈活和強大,但這也是使用C++最容易出現問題的地方,內存泄露問題,估計程序猿都會或多或少的遇到,也遭受了很多程序猿們的深惡痛絕,無數個加班的晚上可能就是因為少了一個delete的緣故。
       用過C++的人基本上都應該會了較過一個叫STL(標準模板庫)的東西,這個東西在一定程度上,更進一步推動了C++的發展和普及程序,里面對于C++ 模板以及C++三大特性封裝、繼承、多態的使用可以說是淋漓盡致,具體的介紹可以參考侯捷老師的《STL源碼剖析》。STL有一個智能指針的東西,即 auto_ptr,有了智能指針以后,再也不用擔心忘記調用delete釋放堆內存了。auto_ptr主要是通過構造函數來綁定堆內存指針,當 auto_ptr對象銷毀的時候,其析構函數就會釋放掉綁定的堆內存,示例代碼如下:

    void Func1()  
    {  
        int *ptr = new int;  

        //...具體函數邏輯  

        delete ptr; //當函數邏輯很復雜的時候,很容易忘記這一句  
    }  

    void Func2()  
    {  
        auto_ptr<int> ptr(new int);  

        //...具體函數邏輯  
    }  
       上面的Fun1函數在申請和釋放堆內存至少要兩句代碼,而使用auto_ptr的Fun2函數只需要一句代碼就可以了,還能保證在退出作用于的時候自動釋放申請的內存空間,既干凈又環保。
       auto_ptr的實現就是《Effective C++》提到的以對象管理資源的方法,眾所周知,類對象在退出其作用域時,會自動調用其析構函數,我們可以充分利用編譯器提供的便利,在對象的構造函數生產資源,在對象的析構函數釋放資源,這樣就不用擔心忘記釋放資源了,但是既然有了auto_ptr這樣的強大工具,我們沒必要再重造車輪了,直接拿來主義就好了。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!