• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            小山日志
            讀書,學習與思考.
            posts - 9,comments - 14,trackbacks - 0

            2. 函數模板 checked_delete() checked_array_delete()

            <boost/checked_delete.hpp> 定義了兩個函數模板 checked_delete checked_array_delete 還有兩個類模板 checked_deleter checked_array_deleter。

            當我們利用指針刪除一個對象的時候,對象類型是否完整決定了對象是否能夠被正確刪除。但是,如果你用 delete 去刪除一個類型并不完整的對象的指針,編譯器并不會給你提供任何錯誤信息(好吧,有些編譯器會給出警告信息,但是程序員通常會忽略警告信息),但是這樣做的結果卻是對象的析構函數根本就沒有被調用。

            所以,我們應當使用更嚴厲的手段禁止這種事情的發生。比如說使用 checked_delete 代替 delete 來刪除指針。當指針所指向的是一個不完全類型時, checked_delete 會使編譯器發出錯誤信息。

            class ?test; // 有聲明,但是忘記了定義,或是忘記????
            ??????????
            // 包含定義文件,test是一個不完全類型

            main()
            {
            test?
            * ?pt? = ?NULL;
            delete?pt;??
            //
            ?有時會有警告信息,
            ????????????
            // 但有時什么都沒有。

            checked_delete(pt);? // ?發出錯誤信息。
            }

            checked_array_delete 是用來對應于 delete [ ] operator checked_deleter checked_array_deleter 是可以配接的仿函數版本。

            3. 函數模板 next() prior()
            包括

            template < class T > T?next(T?x);
            template
            < class T, class ?Distance >
            T?next(T?x,?Distance?n);
            template
            < class T >
            T?prior(T?x);
            template
            < class T, class ?Distance >
            T prior(T?x,?Distance?n);

            函數模板對傳入的指針,智能指針或是迭代器做遞增或遞減,并傳回它。用法如下:

            const ?std::list < T > ::iterator?p? = ?get_some_iterator();
            const ?std::list < T > ::iterator?prev? =
            ?boost::prior(p);
            const ?std::list < T > ::iterator?next? = ?boost::next(prev,? 2 );

            事實上, T next(T x) T prior(T x) 將分別調用 operator++ operator-- ,而 T next(T x, Distance n) T prior(T x, Distance n) 則調用 std::distance(T x, size_t n)

            4.noncopyable

            如果你需要設計一個不可以被復制的類,那么你就要明確地將它的拷貝構造函數和 operator = () 放到 private 聲明下面。 Boos\utility 準備了一個基類 noncopyable ,你只需要讓你的類繼承自 noncopyable 就可以獲得這個性質。對你的類來說這也是一個顯式的聲明:“我是不可以被復制的!”
            用法:

            #include? < boost / utility.hpp >

            class
            ?ResourceLadenFileSystem?:?boost::noncopyable?{


            5 .函數模板 addressof()

            函數模板返回一個對象的真實地址(當然這是交給指針了):

            template < typename?T > inline?T * ????????????????addressof(T & ?v);
            template
            < typename?T > inline const ?T * ???????? addressof( const ?T &
            ?v);
            template
            < typename?T > inline volatile ?T * ????? addressof( volatile ?T &
            ?v);
            template
            < typename?T > inline const volatile T * ?addressof( const volatile T & v);

            我知道你想說,為什么不是簡單的調用operator&()。因為c++允許重載operator&(),所以有時使用它獲得的并不是對象的真實地址,而是編寫重載operator&()代碼的作者希望給你的那個。如果你卻是希望獲得的是這個對象的地址,使用addressof():

            #include?<boost/utility.hpp>
            struct?useless_type?{};

            class
            ?nonaddressable?{
            ??useless_type?
            operator&()?const
            ;
            };

            void
            ?f()?{
            ??nonaddressable?x;
            ??nonaddressable
            *?xp?=
            ?boost::addressof(x);
            ??
            //?nonaddressable*?xpe?=?&x;?//
            error!?operator&()已經被重載,
            ??????????????????????????????
            //它返回的是useless_type的指針
            }




            上述的所有東西都可以簡單的通過在你的源文件開頭處寫上:
            #include?<boost\utility.hpp>
            using?namespace?boost;
            就可以使用了。當然我是指你機器上已經有boost這個奇妙的庫,并且正確配置^_^
            posted on 2006-08-16 00:24 小山日志 閱讀(873) 評論(0)  編輯 收藏 引用 所屬分類: stl/boost/loki/generically
            97精品伊人久久久大香线蕉| 青青草原综合久久| 久久久国产99久久国产一| 久久亚洲AV成人无码软件| 色偷偷88888欧美精品久久久| 久久Av无码精品人妻系列| 97久久天天综合色天天综合色hd| 国产国产成人久久精品| 香蕉久久夜色精品国产尤物| 国产国产成人精品久久| 久久天天躁夜夜躁狠狠躁2022| 久久久久亚洲AV无码网站| 激情综合色综合久久综合| 婷婷伊人久久大香线蕉AV| 久久噜噜久久久精品66| 久久er99热精品一区二区| 久久人与动人物a级毛片| 女人香蕉久久**毛片精品| 久久久亚洲欧洲日产国码二区| 亚洲精品无码专区久久同性男| 2021少妇久久久久久久久久| 久久99精品久久久大学生| 久久激情亚洲精品无码?V| 久久精品九九亚洲精品天堂 | 大伊人青草狠狠久久| 99久久这里只精品国产免费| 精品欧美一区二区三区久久久| 久久精品国产清高在天天线| 国内精品综合久久久40p| 色青青草原桃花久久综合| 国内精品伊人久久久久网站| 99久久免费国产精品| 国内精品久久久久久野外| 久久一日本道色综合久久| 国产成人精品久久| 欧美黑人又粗又大久久久| 久久久久久久波多野结衣高潮 | 久久综合综合久久综合| 久久人人爽人人爽人人片AV麻烦 | 久久精品九九亚洲精品天堂| 久久免费视频网站|