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

            久久九九精品99国产精品| 久久99亚洲综合精品首页| 欧美亚洲色综久久精品国产| 国产激情久久久久久熟女老人 | 久久精品成人免费网站| 久久久99精品一区二区| 久久婷婷成人综合色综合| 国产精品伦理久久久久久| 亚洲精品国产字幕久久不卡| 久久伊人精品青青草原高清| 亚洲午夜福利精品久久| 久久最新精品国产| 精品国产乱码久久久久久人妻| 国内精品久久久久久麻豆 | 国产精品久久午夜夜伦鲁鲁| 国产精品久久久久一区二区三区 | 午夜精品久久久久久影视riav| 国产成年无码久久久久毛片 | 久久91精品国产91久久户| 久久精品国产2020| 国产精品午夜久久| 久久99国产精品二区不卡| 亚洲午夜久久久久久久久电影网| 青春久久| 久久久噜噜噜久久中文字幕色伊伊| 97精品依人久久久大香线蕉97| 综合久久精品色| 久久精品无码一区二区三区日韩| 嫩草伊人久久精品少妇AV| 亚洲色欲久久久综合网东京热| 久久九九久精品国产免费直播| 狠狠人妻久久久久久综合蜜桃| 久久最近最新中文字幕大全| 久久综合狠狠综合久久激情 | 久久免费小视频| 国产精品美女久久久久网| 亚洲精品国产美女久久久| 综合网日日天干夜夜久久| 亚洲欧美成人久久综合中文网 | 久久超碰97人人做人人爱| 无码人妻久久久一区二区三区|