• <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 小山日志 閱讀(874) 評論(0)  編輯 收藏 引用 所屬分類: stl/boost/loki/generically
            久久夜色tv网站| 亚洲精品无码成人片久久| 99久久99久久精品国产片| 污污内射久久一区二区欧美日韩| 久久综合九色综合欧美就去吻| 欧美精品九九99久久在观看| 国产亚洲精久久久久久无码| 日本欧美国产精品第一页久久| 久久久久99精品成人片试看| 国产巨作麻豆欧美亚洲综合久久| 久久成人小视频| 中文字幕亚洲综合久久2| 久久久久久久女国产乱让韩| 青青草国产精品久久| 伊人久久大香线焦AV综合影院| 久久成人影院精品777| 国内精品久久久久影院薰衣草| 狠狠久久综合| 亚洲综合久久综合激情久久 | 亚洲中文久久精品无码ww16| 久久久久久狠狠丁香| 久久人人爽人人爽人人片AV不| 国产高潮久久免费观看| 波多野结衣中文字幕久久| 精品久久久一二三区| 青青草原1769久久免费播放| 久久夜色精品国产噜噜麻豆 | 久久精品成人免费看| 亚洲中文字幕无码久久2017| 一本久久精品一区二区| 久久99国产一区二区三区| 国产福利电影一区二区三区久久久久成人精品综合 | 精品久久久无码中文字幕| 精品亚洲综合久久中文字幕| 久久香蕉国产线看观看精品yw| 久久精品国产亚洲AV久| 久久经典免费视频| 区久久AAA片69亚洲| 久久亚洲日韩看片无码| 亚洲综合精品香蕉久久网| 久久久久久亚洲Av无码精品专口|