• <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
            欧美亚洲国产精品久久高清| 91久久精品视频| 久久久久久九九99精品| 国产亚洲综合久久系列| 国产福利电影一区二区三区久久老子无码午夜伦不 | 丁香色欲久久久久久综合网| 国产成人久久精品一区二区三区| 久久99精品国产| 久久人人添人人爽添人人片牛牛| 久久青草国产精品一区| 午夜精品久久影院蜜桃 | 品成人欧美大片久久国产欧美...| 青青青青久久精品国产h久久精品五福影院1421 | 久久人人爽人人爽人人片AV不| 久久亚洲精品成人AV| 欧美一级久久久久久久大片| 久久99精品国产麻豆宅宅| 亚洲日本va中文字幕久久| 久久99国产精品成人欧美| 久久久久亚洲av无码专区喷水| 日韩亚洲国产综合久久久| 99久久国产免费福利| 久久夜色精品国产噜噜噜亚洲AV| 久久这里只有精品视频99| 国产成人精品久久亚洲高清不卡 | 亚洲国产精品无码久久久蜜芽| 久久青青草原精品国产软件| 国产高潮国产高潮久久久91 | 久久综合亚洲色HEZYO社区| 国产精品99久久久久久董美香| 国产精品久久久久影院嫩草| 亚洲国产精品无码久久久不卡| 久久亚洲sm情趣捆绑调教| 久久无码专区国产精品发布| 亚洲精品第一综合99久久| 思思久久精品在热线热| 久久妇女高潮几次MBA| 午夜欧美精品久久久久久久| 久久av无码专区亚洲av桃花岛| 精品久久久久香蕉网| 国产精品久久久久久影院 |