/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // test_singleton.cpp // (C) Copyright 2018 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to 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) // should pass compilation and execution #include #include #include "test_tools.hpp" static int i = 0; struct A { int m_id; A() : m_id(++i) {} ~A(){ // verify that objects are destroyed in sequence reverse of construction if(i-- != m_id) std::terminate(); } }; struct B { int m_id; B() : m_id(++i) {} ~B(){ // verify that objects are destroyed in sequence reverse of construction if(i-- != m_id) std::terminate(); } }; struct C { int m_id; C() : m_id(++i) {} ~C(){ // verify that objects are destroyed in sequence reverse of construction if(i-- != m_id) std::terminate(); } }; struct D { int m_id; D(){ // verify that only one object is indeed created const C & c = boost::serialization::singleton::get_const_instance(); const C & c1 = boost::serialization::singleton::get_const_instance(); BOOST_CHECK_EQUAL(&c, &c1); // verify that objects are created in sequence of definition BOOST_CHECK_EQUAL(c.m_id, 1); const B & b = boost::serialization::singleton::get_const_instance(); BOOST_CHECK_EQUAL(b.m_id, 2); const A & a = boost::serialization::singleton::get_const_instance(); BOOST_CHECK_EQUAL(a.m_id, 3); std::cout << a.m_id << b.m_id << c.m_id << '\n'; m_id = ++i; } ~D(){ // verify that objects are destroyed in sequence reverse of construction if(i-- != m_id) std::terminate(); } }; int test_main(int, char *[]){ return 0; } // note: not a singleton D d;