refcount_ptr_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 104 行

CPP
104
字号
//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.//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)#include <boost/exception/exception.hpp>#include <boost/detail/lightweight_test.hpp>structtest_type    {    test_type( int & count ):        count_(count)        {        BOOST_TEST(count_==42);        count_=0;        }    ~test_type()        {        BOOST_TEST(!count_);        count_=42;        }    void    add_ref()        {        ++count_;        }    void    release()        {        if( !--count_ )            delete this;        }    private:    test_type( test_type const & );    test_type & operator=( test_type const & );    int & count_;    };intmain()    {    using boost::exception_detail::refcount_ptr;        {        refcount_ptr<test_type> x;        BOOST_TEST(!x.get());        }        {        int count=42;        test_type * a=new test_type(count);        BOOST_TEST(!count);            {            refcount_ptr<test_type> p;            BOOST_TEST(0==count);            p.adopt(a);            BOOST_TEST(p.get()==a);            BOOST_TEST(1==count);                {                refcount_ptr<test_type> q;                q.adopt(p.get());                BOOST_TEST(q.get()==a);                BOOST_TEST(2==count);                    {                    refcount_ptr<test_type> t(p);                    BOOST_TEST(t.get()==a);                    BOOST_TEST(3==count);                        {                        refcount_ptr<test_type> n;                        n=t;                        BOOST_TEST(n.get()==a);                        BOOST_TEST(4==count);                        int cb=42;                        test_type * b=new test_type(cb);                        BOOST_TEST(0==cb);                        n.adopt(b);                        BOOST_TEST(1==cb);                        BOOST_TEST(n.get()==b);                        BOOST_TEST(3==count);                        n.adopt(0);                        BOOST_TEST(42==cb);                        }                    BOOST_TEST(t.get()==a);                    BOOST_TEST(3==count);                    }                BOOST_TEST(q.get()==a);                BOOST_TEST(2==count);                }            BOOST_TEST(p.get()==a);            BOOST_TEST(1==count);            }        BOOST_TEST(42==count);        }    return boost::report_errors();    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?