• <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>

            boost/checked_delete.hpp

            Posted on 2009-06-22 13:26 天邊藍(lán) 閱讀(595) 評(píng)論(0)  編輯 收藏 引用 所屬分類: boost學(xué)習(xí)

             

             1#ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
             2#define BOOST_CHECKED_DELETE_HPP_INCLUDED
             3
             4// MS compatible compilers support #pragma once
             5
             6#if defined(_MSC_VER) && (_MSC_VER >= 1020)
             7# pragma once
             8#endif
             9
            10//
            11//  boost/checked_delete.hpp
            12//
            13//  Copyright (c) 2002, 2003 Peter Dimov
            14//  Copyright (c) 2003 Daniel Frey
            15//  Copyright (c) 2003 Howard Hinnant
            16//
            17//  Distributed under the Boost Software License, Version 1.0. (See
            18//  accompanying file LICENSE_1_0.txt or copy at
            19//  http://www.boost.org/LICENSE_1_0.txt)
            20//
            21//  See http://www.boost.org/libs/utility/checked_delete.html for documentation.
            22//
            23
            24namespace boost
            25{
            26
            27// verify that types are complete for increased safety
            28
            29template<class T> inline void checked_delete(T * x)
            30{
            31    // intentionally complex - simplification causes regressions
            32    typedef char type_must_be_complete[ sizeof(T)? 1-1 ];
            33    (voidsizeof(type_must_be_complete);
            34    delete x;
            35}

            36
            37template<class T> inline void checked_array_delete(T * x)
            38{
            39    typedef char type_must_be_complete[ sizeof(T)? 1-1 ];
            40    (voidsizeof(type_must_be_complete);
            41    delete [] x;
            42}

            43
            44template<class T> struct checked_deleter
            45{
            46    typedef void result_type;
            47    typedef T * argument_type;
            48
            49    void operator()(T * x) const
            50    {
            51        // boost:: disables ADL
            52        boost::checked_delete(x);
            53    }

            54}
            ;
            55
            56template<class T> struct checked_array_deleter
            57{
            58    typedef void result_type;
            59    typedef T * argument_type;
            60
            61    void operator()(T * x) const
            62    {
            63        boost::checked_array_delete(x);
            64    }

            65}
            ;
            66
            67}
             // namespace boost
            68
            69#endif  // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED


            ------------------------------------
            source:http://www.boost.org/doc/libs/1_39_0/libs/utility/checked_delete.html

            The header <boost/checked_delete.hpp> defines two function templates, checked_delete and checked_array_delete, and two class templates, checked_deleter and checked_array_deleter.

            The C++ Standard allows, in 5.3.5/5, pointers to incomplete class types to be deleted with a delete-expression. When the class has a non-trivial destructor, or a class-specific operator delete, the behavior is undefined. Some compilers issue a warning when an incomplete type is deleted, but unfortunately, not all do, and programmers sometimes ignore or disable warnings.

            A particularly troublesome case is when a smart pointer's destructor, such as boost::scoped_ptr<T>::~scoped_ptr, is instantiated with an incomplete type. This can often lead to silent, hard to track failures.

            The supplied function and class templates can be used to prevent these problems, as they require a complete type, and cause a compilation error otherwise.

            Synopsis

             1namespace boost
             2{
             3
             4template<class T> void checked_delete(T * p);
             5template<class T> void checked_array_delete(T * p);
             6template<class T> struct checked_deleter;
             7template<class T> struct checked_array_deleter;
             8
             9}

            10
            11checked_delete
            12template<class T> void checked_delete(T * p);
            13
            14


            Requires: T must be a complete type. The expression delete p must be well-formed.

            Effects: delete p;

             

             1checked_array_delete
             2template<class T> void checked_array_delete(T * p);
             3Requires: T must be a complete type. The expression delete [] p must be well-formed. 
             4
             5Effects: delete [] p; 
             6
             7checked_deleter
             8template<class T> struct checked_deleter
             9{
            10    typedef void result_type;
            11    typedef T * argument_type;
            12    void operator()(T * p) const;
            13}
            ;
            14
            15void checked_deleter<T>::operator()(T * p) const;
            16
            17


            Requires: T must be a complete type. The expression delete p must be well-formed.

            Effects: delete p;

             

             1checked_array_deleter
             2template<class T> struct checked_array_deleter
             3{
             4    typedef void result_type;
             5    typedef T * argument_type;
             6    void operator()(T * p) const;
             7}
            ;
             8
             9void checked_array_deleter<T>::operator()(T * p) const;
            10


            Requires: T must be a complete type. The expression delete [] p must be well-formed.

            Effects: delete [] p;

            Acknowledgements
            The function templates checked_delete and checked_array_delete were originally part of <boost/utility.hpp>, and the documentation acknowledged Beman Dawes, Dave Abrahams, Vladimir Prus, Rainer Deyke, John Maddock, and others as contributors.


            Copyright © 2002 by Peter Dimov. Distributed under the Boost Software License, Version 1.0. See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.

            Copyright © 天邊藍(lán)

            亚洲国产精品成人久久蜜臀| 欧美性大战久久久久久| 久久久精品人妻一区二区三区蜜桃 | 97久久国产露脸精品国产| 久久国产高潮流白浆免费观看| 久久久久久a亚洲欧洲aⅴ| 亚洲国产综合久久天堂 | 久久久久久综合一区中文字幕| 欧美久久一区二区三区| 久久中文娱乐网| 男女久久久国产一区二区三区| 精品免费久久久久国产一区 | 亚洲精品无码久久久久去q| 久久综合久久综合久久综合| 99久久这里只精品国产免费| yellow中文字幕久久网| 久久精品人成免费| 午夜天堂av天堂久久久| 久久人人爽人人爽人人片AV不| 久久噜噜久久久精品66| 一级做a爰片久久毛片人呢| 久久久老熟女一区二区三区| 久久午夜免费视频| 久久夜色精品国产噜噜亚洲a| A级毛片无码久久精品免费| 久久九九全国免费| 狠狠色丁香婷综合久久| 2020久久精品国产免费| 国产精品免费福利久久| 好久久免费视频高清| 国产精品久久久久久久久免费| 久久久国产乱子伦精品作者| 久久久噜噜噜久久熟女AA片| 久久国产欧美日韩精品| 国产精品久久99| 国内精品伊人久久久久影院对白 | 精品久久8x国产免费观看| 日韩精品久久久肉伦网站| 99久久成人国产精品免费| 久久免费线看线看| 午夜视频久久久久一区|