欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

set_new_handler(0)有什么用

 更新時間:2022年08月14日 08:52:17   作者:林夕07  
本文主要介紹了set_new_handler(0)有什么用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

出自《STL源碼剖析》第45頁中有一行代碼set_new_handler(0);

源代碼

    inline T* _allocate(ptrdiff_t size, T*)
    {
        std::set_new_handler(0);
        T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
        if (tmp == 0)
        {
            std::cerr << "out of menory" << std::endl;
        }
        return tmp;
    }

解釋

首先說一下C++對內(nèi)存分配的原理。如果程序員決定用new operator向計(jì)算機(jī)申請一塊內(nèi)存,那么就可能會遇到內(nèi)存不夠的情況。一旦內(nèi)存不夠申請失敗,那么默認(rèn)情況下C++會拋出std::bad_alloc異常。但是如果你不想讓它拋出異常,而是想自己寫一個程序來處理內(nèi)存不夠的情況,那么你就可以用set_new_handler(new_handler),把new_handler指向你寫的內(nèi)存不夠的處理程序。這樣內(nèi)存不夠了的話C++就會去調(diào)用你寫的內(nèi)存不夠處理程序,然后再做后續(xù)處理。如果你寫set_new_handler(0)也就是set_new_handler(nullptr),實(shí)際上就是強(qiáng)制C++認(rèn)為你沒有自定義的內(nèi)存不夠處理程序(因?yàn)橹羔樖?嘛),所以說當(dāng)內(nèi)存不夠的時候,C++就會直接拋出std:bad_alloc異常。

因?yàn)樵谶@個例子中是一個模板函數(shù),所以說誰也不知道用戶在模板實(shí)例化的時候前面有沒有給set_new_handler指定什么自定義的內(nèi)存不夠處理函數(shù)。所以這個用set_new_handler(0),就是為了強(qiáng)制C++在內(nèi)存不夠的時候拋出std:bad_alloc,而不是去執(zhí)行什么其他自定義的內(nèi)存不夠處理程序。所以這里用set_new_handler(0)不是沒有用,而是強(qiáng)制C++在內(nèi)存不夠的時候一定要拋出std:bad_alloc異常

總結(jié)

set_new_handler(0)主要是為了卸載目前的內(nèi)存分配異常處理函數(shù),這樣就會導(dǎo)致一旦分配內(nèi)存失敗,C++就會強(qiáng)制性拋出std:bad_alloc異常,而不是跑到處理某個異常處理函數(shù)去處理。

到此這篇關(guān)于set_new_handler(0)有什么用的文章就介紹到這了,更多相關(guān)set_new_handler(0)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言單鏈隊(duì)列的表示與實(shí)現(xiàn)實(shí)例詳解

    C語言單鏈隊(duì)列的表示與實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要介紹了C語言單鏈隊(duì)列的表示與實(shí)現(xiàn),對于研究數(shù)據(jù)結(jié)構(gòu)與算法的朋友來說很有參考借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C++實(shí)現(xiàn)LeetCode(100.判斷相同樹)

    C++實(shí)現(xiàn)LeetCode(100.判斷相同樹)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(100.判斷相同樹),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言對磁盤文件進(jìn)行快速排序簡單實(shí)例

    C語言對磁盤文件進(jìn)行快速排序簡單實(shí)例

    這篇文章主要介紹了C語言對磁盤文件進(jìn)行快速排序簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 使用C語言編寫鋼琴小程序

    使用C語言編寫鋼琴小程序

    這篇文章主要為大家詳細(xì)介紹了使用C語言編寫鋼琴小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 最新評論