• <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 小山日志 閱讀(890) 評論(0)  編輯 收藏 引用 所屬分類: stl/boost/loki/generically
            久久亚洲欧美国产精品| 久久精品国产亚洲精品| 亚洲狠狠婷婷综合久久蜜芽| 精品人妻伦九区久久AAA片69| 伊人久久大香线蕉亚洲| 91久久福利国产成人精品| 日韩欧美亚洲综合久久影院Ds | 久久精品水蜜桃av综合天堂 | 国产高清国内精品福利99久久| 久久久久久久久久免免费精品| 777午夜精品久久av蜜臀| 91精品婷婷国产综合久久| 亚洲欧美伊人久久综合一区二区 | 无码8090精品久久一区| 久久免费美女视频| 色婷婷综合久久久久中文一区二区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 色成年激情久久综合| 亚洲AV成人无码久久精品老人| 狠狠精品干练久久久无码中文字幕| 亚洲精品美女久久久久99| 日韩精品无码久久一区二区三| 亚洲午夜精品久久久久久人妖| 97精品依人久久久大香线蕉97| 香蕉99久久国产综合精品宅男自 | 久久久久亚洲av毛片大| 99久久精品国产综合一区| 国产精品天天影视久久综合网| 五月丁香综合激情六月久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久99亚洲网美利坚合众国| 久久香综合精品久久伊人| 亚洲va久久久久| 久久精品极品盛宴观看| 亚洲欧美久久久久9999| 久久久久亚洲AV无码专区首JN| 亚洲国产综合久久天堂 | 久久精品国产亚洲av高清漫画| 日韩AV无码久久一区二区| 久久国产精品成人片免费| 一本色道久久88—综合亚洲精品|