• <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
            亚洲精品无码久久久久久| 亚洲精品国精品久久99热| 久久精品成人欧美大片| 久久久亚洲AV波多野结衣| 久久久久99精品成人片欧美 | 久久亚洲中文字幕精品有坂深雪| 久久99精品久久只有精品| 香蕉久久一区二区不卡无毒影院| 亚洲另类欧美综合久久图片区| 亚洲国产精品无码久久久蜜芽| 久久精品国产一区二区电影| 久久精品中文字幕一区| 精品久久久久久国产91| 久久精品免费全国观看国产| 久久国产精品成人免费| 99久久免费国产精品特黄| 国产AⅤ精品一区二区三区久久| 热久久视久久精品18| 久久播电影网| 青草影院天堂男人久久| 色妞色综合久久夜夜| 精品久久久久久无码不卡| 久久久WWW免费人成精品| 久久九九全国免费| 久久精品成人免费网站| 国产韩国精品一区二区三区久久| 国内高清久久久久久| 久久久久人妻一区二区三区| 欧美色综合久久久久久| 亚洲国产婷婷香蕉久久久久久| 国产香蕉97碰碰久久人人| 国产精品久久久久影院嫩草| 久久99精品久久久久子伦| 久久综合给合久久国产免费| 伊人色综合久久天天人手人婷| 久久综合亚洲色HEZYO国产| 天天做夜夜做久久做狠狠| 色天使久久综合网天天| 无码任你躁久久久久久老妇App| 亚洲综合久久夜AV | 久久综合亚洲色HEZYO社区|