⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_auto_ptr.cpp

📁 VC源码,开源测试工具.有助于VC++的学习与开发
💻 CPP
字号:
#include <tut/tut.hpp>#include <memory>using std::auto_ptr;/** * This example test group tests std::auto_ptr implementation. * Tests are far from full, of course. */namespace tut{/** * Struct which may contain test data members. * Test object (class that contains test methods) * will inherite from it, so each test method can * access members directly. * * Additionally, for each test, test object is re-created * using defaut constructor. Thus, any prepare work can be put * into default constructor. * * Finally, after each test, test object is destroyed independently * of test result, so any cleanup work should be located in destructor. */struct auto_ptr_data{    /**     * Type used to check scope lifetime of auto_ptr object.     * Sets extern boolean value into true at constructor, and     * to false at destructor.     */    bool exists;    struct existing    {        bool& s_;        existing(bool& s) : s_(s)        {            s_ = true;        }        ~existing()        {            s_ = false;        }    };};/** * This group of declarations is just to register * test group in test-application-wide singleton. * Name of test group object (auto_ptr_group) shall * be unique in tut:: namespace. Alternatively, you * you may put it into anonymous namespace. */typedef test_group<auto_ptr_data> tf;typedef tf::object object;tf auto_ptr_group("std::auto_ptr");/** * Checks default constructor. */template<>template<>void object::test<1>(){    auto_ptr<existing> ap;    ensure(ap.get() == 0);    ensure(ap.operator->() == 0);}/** * Checks constructor with object */template<>template<>void object::test<2>(){    {        auto_ptr<existing> ap(new existing(exists));        ensure("get", ap.get() != 0);        ensure_equals("constructed", exists, true);    }    // ptr left scope    ensure_equals("destructed", exists, false);}/** * Checks operator -> and get() */template<>template<>void object::test<3>(){    auto_ptr<existing> ap(new existing(exists));    existing* p1 = ap.get();    existing* p2 = ap.operator->();    ensure("get equiv ->", p1 == p2);    // ensure no losing ownership    p1 = ap.get();    ensure("still owner", p1 == p2);}/** * Checks release() */template<>template<>void object::test<4>(){    {        auto_ptr<existing> ap(new existing(exists));        existing* p1 = ap.get();        auto_ptr<existing> ap2(ap.release());        ensure("same pointer", p1 == ap2.get());        ensure("lost ownership", ap.get() == 0);    }    ensure("destructed", exists == false);}/** * Checks assignment. */template<>template<>void object::test<5>(){    {        auto_ptr<existing> ap(new existing(exists));        existing* p1 = ap.get();        auto_ptr<existing> ap2;        ap2 = ap;        ensure("same pointer", p1 == ap2.get());        ensure("lost ownership", ap.get() == 0);    }    ensure("destructed", exists == false);}/** * Checks copy constructor. */template<>template<>void object::test<6>(){    {        auto_ptr<existing> ap(new existing(exists));        existing* p1 = ap.get();        auto_ptr<existing> ap2(ap);        ensure("same pointer", p1 == ap2.get());        ensure("lost ownership", ap.get() == 0);    }    ensure("destructed", exists == false);}}

⌨️ 快捷键说明

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